1

我正在用 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 仅使用空数据和“等待”连接状态调用构建器一次。

我尝试了什么:

  1. 替换FutureBuilderStreamBuilder和; outTitle.last_outTitle.last.asStream()
  2. 调用outTitle.last.then()外部小部件和从 bloc 构造函数;
  3. outTitle更改toValueObservable和 call的签名last.wrapped
  4. 将Rx 更改BehaviorSubject为 vanilla StreamController
  5. 在构建视图之前添加流一些值;

什么都没发生。只是带有StreamBuilders 的流运行良好,但不可能从last属性中获取最后一个值。

问题可能出在哪里?

4

1 回答 1

1

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

你打电话时

_titleController.close()

last将发出一个值。

于 2018-12-19T08:08:28.050 回答