首页 > 解决方案 > 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 disposedSUBSCRIPTION canceled

但是,如果我再次登录(没有热重新加载应用程序)我收到以下错误消息,关于fcmListener = FirebaseMessaging.onMessage.listen()

Unhandled Exception: Bad state: Cannot add new events while doing an addStream. 虽然,FCMService 仍然按预期工作。

这只发生在他们不久前重写的新 firebase_messaging 中。我在以前版本的 firebase_messaging 中使用了相同的代码,并且没有发生此异常。

我在这里错过了什么吗?

标签: flutterfirebase-cloud-messaging

解决方案


尝试调用.asBroadcastStream()FirebaseMessaging.onMessage

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

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


推荐阅读