我在我的应用程序中使用 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();
,因为应用程序在关闭时无法重定向。