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" 连接状态调用构建器一次。

我尝试了什么:

  1. FutureBuilder 替换为 StreamBuilder,将 outTitle.last 替换为 outTitle.last.asStream()
  2. 在小部件外部和从 bloc 构造函数调用 outTitle.last.then()
  3. outTitle 的签名更改为 ValueObservable 并调用 last.wrapped;
  4. 将 Rx 的 BehaviorSubject 更改为原版 StreamController
  5. 在构建视图之前添加流式传输一些值;

没有任何反应。 只有 StreamBuilder 的流工作得很好,但不可能从 last 属性.

中获取最后一个值

问题出在哪里?

last 仅在流关闭时发出。否则流无法知道最后一个事件是什么。

当你打电话时

_titleController.close()

last 将发出一个值。