flutter - Flutter FirebaseMessaging - StreamSubscription 未正确处理
问题描述
我有以下基本示例,它似乎无法正常工作:
pubspec.yaml:
firebase_messaging: ^10.0.0
FcmService.dart
StreamSubscription fcmListener;
void init() {
fcmListener = FirebaseMessaging.onMessage.listen((RemoteMessage message) {
// do stuff
});
}
void dispose() {
print('SUBSCRIPTION canceled');
fcmListener.cancel()
}
应用程序.dart
void init() {
fcmService.init();
// other inits()
}
void dispose() {
print('EVERYTHING disposed');
fcmService.dispose();
// other disposes()
}
问题
在我登录到我的应用程序后init()
,调用 App.dart 的方法,并且一切都已正确设置。FCM 服务一切正常。当我注销应用程序时,dispose()
调用 App.dart 的方法,应用程序重定向到 Login.dart。正确的日志是EVERYTHING disposed
和SUBSCRIPTION canceled
。
但是,如果我再次登录(没有热重新加载应用程序)我收到以下错误消息,关于fcmListener = FirebaseMessaging.onMessage.listen()
Unhandled Exception: Bad state: Cannot add new events while doing an addStream
. 虽然,FCMService 仍然按预期工作。
这只发生在他们不久前重写的新 firebase_messaging 中。我在以前版本的 firebase_messaging 中使用了相同的代码,并且没有发生此异常。
我在这里错过了什么吗?
解决方案
尝试调用.asBroadcastStream()
后FirebaseMessaging.onMessage
:
void init() {
fcmListener = FirebaseMessaging
.onMessage
.asBroadcastStream()
.listen((RemoteMessage message) {
// do stuff
});
}
应使用 调用相同的方法FirebaseMessaging.onMessageOpenedApp
。我在GitHub 问题中找到了这个解决方案。
推荐阅读
- r - R:绘制字符的确切大小和位置
- ruby-on-rails - nil:NilClass 的未定义方法“provider”与条带连接
- react-native - React Native Flatlist 不重新渲染
- glsl - 如何在 GLSL 中复制数组?
- oauth-2.0 - 如何在我自己的 oauth2 客户端中注销
- javascript - 如何使用 jQuery 从输入中删除选中的属性
- html - 我如何从下一个 img 标签设置 div 高度?
- java - 如何以 Struts 2 所需的形式上传文件
- c++ - qt 做昂贵的操作会破坏样式表
- dji-sdk - DJI Onboardsdk 无法自动起飞