【发布时间】:2019-10-10 05:06:48
【问题描述】:
我的 StreamBuilder 在视图中:
Widget build(BuildContext context) {
print("rebuilding..."); // as of now this gets called only on view initialization and never again - i.e. not on new events going through alarmController.stream
return StreamBuilder(
stream: widget.bloc.alarmController.stream,
initialData: Alarm(''),
builder: (BuildContext context, AsyncSnapshot<Alarm> snapshot) {
if (!snapshot.hasData) {
return Center(
child: Text(StringLiterals.NO_ALARM_DATA_MSG))
);
}
return Switch(
activeColor: Colors.red,
value: snapshot.data.status == 'Started',
onChanged: (bool _value) {
_newAlarmValue = _value;
_askAlarmConfirmation();
}));
});
}
我的集团的肉:
AlarmBloc(this.Api) {
getAlarm();
}
getAlarm() async {
Alarm response = await Api.getAlarmStatus();
alarmController.sink.add(response); // here im adding new event, therefore streambuilder should rebuild, right?
}
最后是我调用来启动新事件的代码(在本例中是 firebase 消息):
if(_message.notification.body.contains("Alarm") && IS_LOGGED_IN == true) {
alarmBloc.getAlarm();
}
所以问题是当新事件通过alarmController.stream 时StreamBuilder 不会重建。可能是什么原因?
【问题讨论】:
-
尝试通过在
StreamBuilder中添加您的打印语句来进行测试。 AFAIK 它不会强制整个小部件重建。 -
我假设您使用的是 rxDart,所以请告诉我您使用的是哪种流控制器? PublishSubject 还是 BehaviorSubject?
-
这是 BehaviourSubject @MarcosBoaventura
标签: dart flutter rxdart stream-builder