簡體   English   中英

Flutter FirebaseMessaging - StreamSubscription 未正確處理

[英]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 disposedSUBSCRIPTION 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM