[英]Flutter FirebaseMessaging - StreamSubscription not handled properly
我有以下基本示例,它似乎無法正常工作:
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()
}
App.dart
void init() {
fcmService.init();
// other inits()
}
void dispose() {
print('EVERYTHING disposed');
fcmService.dispose();
// other disposes()
}
在我登錄到我的應用程序后,調用 App.dart 的init()
方法,並且一切都設置正確。 FCM 服務一切正常。 當我注銷應用程序時,調用 App.dart 的dispose()
方法,應用程序重定向到 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 中使用了相同的代碼,並且沒有發生此異常。
我在這里錯過了什么嗎?
嘗試在FirebaseMessaging.onMessage
之后調用.asBroadcastStream()
:
void init() {
fcmListener = FirebaseMessaging
.onMessage
.asBroadcastStream()
.listen((RemoteMessage message) {
// do stuff
});
}
應該使用FirebaseMessaging.onMessageOpenedApp
調用相同的方法。 我在GitHub 問題中找到了這個解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.