【问题标题】:Flutter FirebaseMessaging - StreamSubscription not handled properlyFlutter FirebaseMessaging - StreamSubscription 未正确处理
【发布时间】:2021-08-09 05:36:58
【问题描述】:

我有以下基本示例,它似乎无法正常工作:

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 中使用了相同的代码,并且没有发生此异常。

我错过了什么吗?

【问题讨论】:

    标签: flutter firebase-cloud-messaging


    【解决方案1】:

    尝试在FirebaseMessaging.onMessage之后调用.asBroadcastStream()

    void init() {
      fcmListener = FirebaseMessaging
        .onMessage
        .asBroadcastStream()
        .listen((RemoteMessage message) {
          // do stuff
        });
    }
    

    应该使用FirebaseMessaging.onMessageOpenedApp 调用相同的方法。我在GitHub issue 中找到了这个解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 2014-08-31
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多