我正在用 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; - 在构建视图之前添加流一些值;
什么都没发生。只是带有StreamBuilders 的流运行良好,但不可能从last属性中获取最后一个值。
问题可能出在哪里?