wait for init

This commit is contained in:
Henry Hiles 2026-02-08 12:15:05 -05:00
commit 672e187814
No known key found for this signature in database
3 changed files with 20 additions and 1 deletions

View file

@ -5,6 +5,7 @@ import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:ffi/ffi.dart"; import "package:ffi/ffi.dart";
import "package:flutter/foundation.dart"; import "package:flutter/foundation.dart";
import "package:nexus/controllers/client_state_controller.dart"; import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/controllers/init_complete_controller.dart";
import "package:nexus/controllers/rooms_controller.dart"; import "package:nexus/controllers/rooms_controller.dart";
import "package:nexus/controllers/space_edges_controller.dart"; import "package:nexus/controllers/space_edges_controller.dart";
import "package:nexus/controllers/sync_status_controller.dart"; import "package:nexus/controllers/sync_status_controller.dart";
@ -58,6 +59,9 @@ class ClientController extends AsyncNotifier<int> {
.watch(SyncStatusController.provider.notifier) .watch(SyncStatusController.provider.notifier)
.set(SyncStatus.fromJson(decodedMuksEvent)); .set(SyncStatus.fromJson(decodedMuksEvent));
break; break;
case "init_complete":
ref.watch(InitCompleteController.provider.notifier).complete();
break;
case "sync_complete": case "sync_complete":
final syncData = SyncData.fromJson(decodedMuksEvent); final syncData = SyncData.fromJson(decodedMuksEvent);
final roomProvider = RoomsController.provider; final roomProvider = RoomsController.provider;

View file

@ -0,0 +1,11 @@
import "package:flutter_riverpod/flutter_riverpod.dart";
class InitCompleteController extends Notifier<bool> {
@override
bool build() => false;
void complete() => state = true;
static final provider = NotifierProvider<InitCompleteController, bool>(
InitCompleteController.new,
);
}

View file

@ -6,6 +6,7 @@ import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/client_controller.dart"; import "package:nexus/controllers/client_controller.dart";
import "package:nexus/controllers/client_state_controller.dart"; import "package:nexus/controllers/client_state_controller.dart";
import "package:nexus/controllers/header_controller.dart"; import "package:nexus/controllers/header_controller.dart";
import "package:nexus/controllers/init_complete_controller.dart";
import "package:nexus/controllers/multi_provider_controller.dart"; import "package:nexus/controllers/multi_provider_controller.dart";
import "package:nexus/controllers/shared_prefs_controller.dart"; import "package:nexus/controllers/shared_prefs_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart"; import "package:nexus/helpers/extensions/better_when.dart";
@ -122,6 +123,7 @@ class App extends StatelessWidget {
final clientState = ref.watch( final clientState = ref.watch(
ClientStateController.provider, ClientStateController.provider,
); );
if (clientState == null || !clientState.isInitialized) { if (clientState == null || !clientState.isInitialized) {
return Loading(); return Loading();
} }
@ -131,7 +133,9 @@ class App extends StatelessWidget {
} else if (!clientState.isVerified) { } else if (!clientState.isVerified) {
return VerifyPage(); return VerifyPage();
} else { } else {
return ChatPage(); return ref.watch(InitCompleteController.provider)
? ChatPage()
: Loading();
} }
}, },
), ),