繁体   English   中英

StreamBuilder flutter

[英]StreamBuilder flutter

我在列表中添加了两个项目,然后将列表添加到接收器。

var list = new List<String>();
AbcBloc _abcBloc = AbcBloc(repository: null);

 @override
  void didChangeDependencies() {
    _abcBloc = Provider.of<AbcBloc>(context);
    super.didChangeDependencies();
  }

@override
  void initState() {
    super.initState();

    list.add('Electrical');
    list.add('Inspection');

    _abcBloc.listSink.add(list);
  }

但是当我尝试在 TextField 中打印列表时,它打印为空?

  StreamBuilder(
                      stream: _abcBloc.listStream,
                      builder: (context, snapshot) {
                        return TextField(
                          decoration: InputDecoration(
                              labelText: snapshot.data,
                             ....
                        );
                      },
                    ),

AbcBloc.dart

  final _list = BehaviorSubject<List<String>>();
  get listSink => _list.sink;
  get listStream => _list.stream;

编辑

使用建议答案后,它会打印 null 值。 为什么会发生这种情况?

首先, snapshot.data是一个字符串项目列表,因此要将列表显示为单个字符串,您需要添加一个toString(); 其次,您需要更具体的类型 - 您需要指定 StreamBuilder 期望的数据,即

    StreamBuilder<List<String>>(
      stream: _abcBloc.listStream,
      builder: (context, snapshot) {
        return TextField(
            decoration: InputDecoration(
          labelText: snapshot.data.toString(),
        ));
      },
    ),

以您的示例并进行这两项更改,然后导致[Electrical, Inspection]在我的设备上的文本字段中显示。

我看到的问题:

  • StreamBuilder 没有泛型类型。 使它成为StreamBuilder<List<String>>
  • 您将 List 传递给 labelText 参数。 你应该传递字符串。 (例如snapshot.data.toString()
  • 您不检查您的 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 是否在构建器内部有数据。 您可以使用snapshot.hasData条件或设置 initialData 参数来做到这一点。

我能够修复它。我所做的是将列表和 stream 放入didChangeDependencies中。

  @override
  void didChangeDependencies() {
     _abcBloc = Provider.of<AbcBloc>(context);      
     list.add('Electrical');
     list.add('Inspection');    
     _abcBloc.listSink.add(list);
     super.didChangeDependencies();

  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM