Stream.last 回调从不触发
Stream.last callback never firing
我正在使用 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 仅使用空数据和 "waiting" 连接状态调用构建器一次。
我尝试了什么:
- 将
FutureBuilder
替换为 StreamBuilder
,将 outTitle.last
替换为 outTitle.last.asStream()
;
- 在小部件外部和从 bloc 构造函数调用
outTitle.last.then()
;
- 将
outTitle
的签名更改为 ValueObservable
并调用 last.wrapped
;
- 将 Rx 的
BehaviorSubject
更改为原版 StreamController
;
- 在构建视图之前添加流式传输一些值;
没有任何反应。
只有 StreamBuilder
的流工作得很好,但不可能从 last
属性.
中获取最后一个值
问题出在哪里?
last
仅在流关闭时发出。否则流无法知道最后一个事件是什么。
当你打电话时
_titleController.close()
last
将发出一个值。
我正在使用 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 仅使用空数据和 "waiting" 连接状态调用构建器一次。
我尝试了什么:
- 将
FutureBuilder
替换为StreamBuilder
,将outTitle.last
替换为outTitle.last.asStream()
; - 在小部件外部和从 bloc 构造函数调用
outTitle.last.then()
; - 将
outTitle
的签名更改为ValueObservable
并调用last.wrapped
; - 将 Rx 的
BehaviorSubject
更改为原版StreamController
; - 在构建视图之前添加流式传输一些值;
没有任何反应。
只有 StreamBuilder
的流工作得很好,但不可能从 last
属性.
问题出在哪里?
last
仅在流关闭时发出。否则流无法知道最后一个事件是什么。
当你打电话时
_titleController.close()
last
将发出一个值。