🐛 Optimize the disposal check in message notifier, close #211
This commit is contained in:
@@ -50,9 +50,6 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
|
|
||||||
late Future<SnAccount?> Function(String) _fetchAccount;
|
late Future<SnAccount?> Function(String) _fetchAccount;
|
||||||
|
|
||||||
// Disposal handling
|
|
||||||
bool _disposed = false;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureOr<List<LocalChatMessage>> build(String roomId) async {
|
FutureOr<List<LocalChatMessage>> build(String roomId) async {
|
||||||
_apiClient = ref.watch(apiClientProvider);
|
_apiClient = ref.watch(apiClientProvider);
|
||||||
@@ -81,17 +78,11 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
|
|
||||||
talker.log('MessagesNotifier built for room $roomId');
|
talker.log('MessagesNotifier built for room $roomId');
|
||||||
|
|
||||||
// Set up disposal handling
|
|
||||||
ref.onDispose(() {
|
|
||||||
_disposed = true;
|
|
||||||
talker.log('MessagesNotifier disposed for room $roomId');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Only setup sync and lifecycle listeners if user is a member
|
// Only setup sync and lifecycle listeners if user is a member
|
||||||
if (identity != null) {
|
if (identity != null) {
|
||||||
ref.listen(appLifecycleStateProvider, (_, next) {
|
ref.listen(appLifecycleStateProvider, (_, next) {
|
||||||
next.whenData((state) {
|
next.whenData((state) {
|
||||||
if (_disposed) return; // Check disposal before accessing ref
|
if (!ref.mounted) return; // Check disposal before accessing ref
|
||||||
if (state == AppLifecycleState.paused) {
|
if (state == AppLifecycleState.paused) {
|
||||||
_lastPauseTime = DateTime.now();
|
_lastPauseTime = DateTime.now();
|
||||||
talker.log('App paused, recording time');
|
talker.log('App paused, recording time');
|
||||||
@@ -100,7 +91,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
final diff = DateTime.now().difference(_lastPauseTime!);
|
final diff = DateTime.now().difference(_lastPauseTime!);
|
||||||
if (diff > const Duration(minutes: 1)) {
|
if (diff > const Duration(minutes: 1)) {
|
||||||
talker.log('App resumed after >1 min, syncing messages');
|
talker.log('App resumed after >1 min, syncing messages');
|
||||||
if (!_disposed) {
|
if (!!ref.mounted) {
|
||||||
syncMessages(); // Check disposal before calling syncMessages
|
syncMessages(); // Check disposal before calling syncMessages
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -336,7 +327,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
talker.log('Starting message sync');
|
talker.log('Starting message sync');
|
||||||
// Use Future.microtask to set syncing state, but check disposal to avoid errors
|
// Use Future.microtask to set syncing state, but check disposal to avoid errors
|
||||||
Future.microtask(() {
|
Future.microtask(() {
|
||||||
if (!_disposed) {
|
if (!!ref.mounted) {
|
||||||
ref.read(chatSyncingProvider.notifier).set(true);
|
ref.read(chatSyncingProvider.notifier).set(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -514,7 +505,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
if (!_hasMore || state is AsyncLoading) return;
|
if (!_hasMore || state is AsyncLoading) return;
|
||||||
talker.log('Loading more messages');
|
talker.log('Loading more messages');
|
||||||
|
|
||||||
if (!_disposed) {
|
if (!!ref.mounted) {
|
||||||
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(true));
|
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(true));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@@ -1058,7 +1049,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
_isJumping = true;
|
_isJumping = true;
|
||||||
|
|
||||||
// Clear flashing messages when starting a new jump
|
// Clear flashing messages when starting a new jump
|
||||||
if (!_disposed) {
|
if (!!ref.mounted) {
|
||||||
ref.read(flashingMessagesProvider.notifier).state = {};
|
ref.read(flashingMessagesProvider.notifier).state = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user