我正在用 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()
外部小部件和从 bloc 构造函数; outTitle
更改toValueObservable
和 call的签名last.wrapped
;- 将Rx 更改
BehaviorSubject
为 vanillaStreamController
; - 在构建视图之前添加流一些值;
什么都没发生。只是带有StreamBuilder
s 的流运行良好,但不可能从last
属性中获取最后一个值。
问题可能出在哪里?