init ClientController before other providers

This commit is contained in:
Henry Hiles 2026-09-21 23:03:57 -04:00
commit 0cd815dc79
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 49 additions and 30 deletions

View file

@ -121,7 +121,7 @@ class UnifiedPushController extends AsyncNotifier<bool> {
Future<void> register([bool alreadyRegistered = false]) async { Future<void> register([bool alreadyRegistered = false]) async {
final clientState = ref.watch(ClientStateController.provider); final clientState = ref.watch(ClientStateController.provider);
if (clientState?.deviceId == null) ref.invalidateSelf(); if (clientState?.deviceId == null) return ref.invalidateSelf();
final capabilities = await ref final capabilities = await ref
.watch(ClientController.provider.notifier) .watch(ClientController.provider.notifier)

View file

@ -1,7 +1,6 @@
import "dart:io"; import "dart:io";
import "package:dynamic_color/dynamic_color.dart"; import "package:dynamic_color/dynamic_color.dart";
import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter/foundation.dart"; import "package:flutter/foundation.dart";
import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:media_kit/media_kit.dart"; import "package:media_kit/media_kit.dart";
@ -18,7 +17,9 @@ import "package:nexus/helpers/extensions/scheme_to_theme.dart";
import "package:nexus/helpers/font_licenses.dart"; import "package:nexus/helpers/font_licenses.dart";
import "package:nexus/pages/chat.dart"; import "package:nexus/pages/chat.dart";
import "package:nexus/pages/select_server.dart"; import "package:nexus/pages/select_server.dart";
import "package:nexus/pages/settings.dart";
import "package:nexus/pages/verify.dart"; import "package:nexus/pages/verify.dart";
import "package:nexus/widgets/appbar.dart";
import "package:nexus/widgets/error_dialog.dart"; import "package:nexus/widgets/error_dialog.dart";
import "package:nexus/widgets/loading.dart"; import "package:nexus/widgets/loading.dart";
import "package:window_manager/window_manager.dart"; import "package:window_manager/window_manager.dart";
@ -148,37 +149,55 @@ class const App({super.key}) extends StatelessWidget {
child: Scaffold( child: Scaffold(
body: Consumer( body: Consumer(
builder: (_, ref, _) => ref builder: (_, ref, _) => ref
.watch( .watch(ClientController.provider)
MultiProviderController.provider(
IListConst([
ClientController.provider,
NotificationController.provider,
UnifiedPushController.provider,
MemberListOpenedController.provider,
KeyController.provider(KeyController.roomKey),
KeyController.provider(KeyController.spaceKey),
]),
),
)
.betterWhen( .betterWhen(
data: (_) => Consumer( data: (_) => ref
builder: (_, ref, _) { .watch(
final clientState = ref.watch( MultiProviderController.provider(
ClientStateController.provider, .new([
); NotificationController.provider,
UnifiedPushController.provider,
MemberListOpenedController.provider,
KeyController.provider(KeyController.roomKey),
KeyController.provider(KeyController.spaceKey),
]),
),
)
.betterWhen(
data: (_) => Consumer(
builder: (_, ref, _) {
final clientState = ref.watch(
ClientStateController.provider,
);
if (clientState == null || !clientState.isInitialized) { if (clientState == null ||
return Loading(); !clientState.isInitialized) {
} return Loading();
}
if (!clientState.isLoggedIn) { if (!clientState.isLoggedIn) {
return SelectServerPage(); return SelectServerPage();
} else if (!clientState.isVerified) { } else if (!clientState.isVerified) {
return VerifyPage(); return VerifyPage();
} else { } else {
return ChatPage(); return ChatPage();
} }
}, },
),
),
loading: () => Scaffold(
appBar: Appbar(
actions: .new([
IconButton(
onPressed: () => showDialog(
context: context,
builder: (_) => SettingsPage(),
),
icon: Icon(Icons.settings),
),
]),
),
body: Loading(),
), ),
), ),
), ),