StreamController Bad State:Stream 已经被监听

时间:2021-05-12 20:37:24

标签: flutter dart

我在我的应用程序中使用 OneSignal 发送通知。我正在尝试使用该功能以这种方式使用 StreamController 将用户从通知引导到特定屏幕:

控制器:

import 'dart:async';
import 'package:ruitoquefood/models/notification.dart';

StreamController<Notification> streamController = new StreamController();

main.dat:

OneSignal.shared
        .setNotificationOpenedHandler((OSNotificationOpenedResult result) {
      var data = result.notification.payload.additionalData;
      Notification = Notification.fromJson(data);
      streamController.add(notification);
    });

home.dart:

@override
  void initState() {
    super.initState();
    streamController.stream.listen((event) {
      Navigator.pushNamed(context, event.page, arguments: event.id);
    });
  }

  @override
  void dispose() {
    streamController.close();
    super.dispose();
  }

一切正常,但如果我退出应用程序并再次登录,我会收到以下错误:

Bad State:Stream has already been listened to.

显然,当我 pushReplacement 主页时,dispose() 方法没有关闭流控制器。

我无法使用此 StreamController<Notification> streamController = new StreamController.broadcast();,因为应用程序在关闭时无法重定向。

0 个答案:

没有答案