Flutter Riverpod:使用状态通知器刷新屏幕外页面



我使用StateNotifier和Riverpod。我有一个通知页面,其中包含通知列表。当收到通知时,我触发通知刷新。然而,当我导航到通知页面时,它仍然使用旧的(缓存?)列表。

如何在屏幕外刷新页面?

<

前景信息/h3>
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
_localNotification.showLocalNotification(message);
ProviderContainer().read(notificationProvider).getNotification();
});

的背景信息
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
final LocalNotification localNotification = LocalNotification();
await localNotification.init();
localNotification.showLocalNotification(message);
ProviderContainer().read(notificationProvider).getNotification();
}

NotificationProvider

Future<void> getNotification() async {
try {
state = const NotificationLoadingState();
_notificationList = await _notificationRepository.getNotification();
state = NotificationLoadedState(_notificationList); // ==> I get a new list here
} catch (e, s) {
state = const NotificationErrorState('error fetching notification');
}
}
UI

final state = watch(notificationProvider.state);
if (state is NotificationLoadingState) {
return _buildLoading();
} else if (state is NotificationLoadedState) {
return _buildLoaded(state.notificationList); // ==> I still get the old list here
} else if (state is NotificationErrorState) {
return _buildError(state.message);
}

编辑:

我通过使用navigatorKey.currentContext来解决前台消息处理程序。

然而,我仍然没有解决后台消息处理程序。我尝试改变我的main.dart使用UncontrolledProviderScope与全局ProviderContainer,然后从后台消息处理程序调用。还是不新鲜

使用这一行,您将为您的提供商创建一个新实例:

ProviderContainer().read(notificationProvider).getNotification();

你需要使用上下文来获取现有的ProviderContainer实例:

context.read(notificationProvider).getNotification();

或者如果你不在UI中,在你的提供商之间建立依赖

最新更新