我正在用BLoC模式编写Flutter应用程序。我想要的很简单:显示一个TextField,将流中的最后一个值作为初始值。
有一个简单的集团:
class MyBloc {
BehaviorSubject<String> _titleController;
Stream<String> get outTitle => _titleController.stream;
Sink<String> get inTitle => _titleController.sink;
MyBloc(Model model) {
_titleController = BehaviorSubject(seedValue: model.title);
}
}
还有使用FutureBuilder的视图:
@override
Widget build(BuildContext context) {
var bloc = /* get the bloc from a widgets' hierarchy */
return FutureBuilder(
future: bloc.outTitle.last,
builder: (context, snapshot) {
return TextField(
controller: TextEditingController.fromValue(
TextEditingValue(text: snapshot.data ?? 'null')
),
);
}
);
}
问题在于,FutureBuilder仅使用空数据和“等待”连接状态调用构建器一次。
我尝试过的事情:
FutureBuilder
替换为StreamBuilder
,将outTitle.last
替换为outTitle.last.asStream()
; outTitle.last.then()
; outTitle
的签名更改为ValueObservable
并调用last.wrapped
; BehaviorSubject
更改为香草StreamController
; 什么都没发生。
只是带有StreamBuilder
的流才能很好地工作,但是不可能从last
属性中获取最后一个值。
问题出在哪里?
答案 0 :(得分:0)
last
仅在流关闭时发出。否则,流将不知道最后一个事件是什么。
致电时
_titleController.close()
last
将发出一个值。