Skip to content

Commit 967be6d

Browse files
committed
fix: ensure providers wait for Isar initialization to prevent runtime exceptions
1 parent 5439962 commit 967be6d

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

lib/src/features/chat/presentation/chat_controller.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:typed_data';
22
import 'package:riverpod_annotation/riverpod_annotation.dart';
33
import 'package:image_picker/image_picker.dart';
44
import 'package:flutter_image_compress/flutter_image_compress.dart';
5+
import 'package:off_chat/src/core/database/database_provider.dart';
56
import 'package:off_chat/src/core/database/isar_service.dart';
67
import 'package:off_chat/src/core/database/models/message.dart';
78
import 'package:off_chat/src/features/chat/data/message_handler.dart';
@@ -12,8 +13,15 @@ part 'chat_controller.g.dart';
1213
class ChatController extends _$ChatController {
1314
@override
1415
Stream<List<Message>> build(String remoteDeviceId) {
15-
final stableId = int.parse(remoteDeviceId);
16-
return IsarService().watchMessagesWithDevice(stableId);
16+
// Ensure Isar is initialized
17+
final isarAsync = ref.watch(isarDatabaseProvider);
18+
19+
if (isarAsync.hasValue) {
20+
final stableId = int.parse(remoteDeviceId);
21+
return IsarService().watchMessagesWithDevice(stableId);
22+
}
23+
24+
return const Stream.empty();
1725
}
1826

1927
Future<void> sendTextMessage(String text) async {
Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:async';
22
import 'package:riverpod_annotation/riverpod_annotation.dart';
3+
import 'package:off_chat/src/core/database/database_provider.dart';
34
import 'package:off_chat/src/core/database/isar_service.dart';
45
import 'package:off_chat/src/core/database/models/found_device.dart';
56

@@ -9,11 +10,18 @@ part 'discovery_controller.g.dart';
910
class DiscoveryController extends _$DiscoveryController {
1011
@override
1112
Stream<List<FoundDevice>> build() {
12-
return IsarService().watchFoundDevices();
13+
// Watch the provider to ensure Isar is initialized
14+
final isarAsync = ref.watch(isarDatabaseProvider);
15+
16+
if (isarAsync.hasValue) {
17+
return IsarService().watchFoundDevices();
18+
}
19+
20+
// Return empty stream while initializing
21+
return const Stream.empty();
1322
}
1423

1524
Future<void> manualRefresh() async {
1625
// Background service handles discovery cycle automatically.
17-
// We could potentially trigger a manual scan via service invoke if needed.
1826
}
1927
}

0 commit comments

Comments
 (0)