【问题标题】:StreamBuilder flutterStreamBuilder 颤动
【发布时间】:2020-03-01 16:17:06
【问题描述】:

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

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;

编辑

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

【问题讨论】:

    标签: flutter dart stream


    【解决方案1】:

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

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

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

    【讨论】:

    • 为什么打印值 null ?
    【解决方案2】:

    我看到的问题:

    • StreamBuilder 没有泛型类型。让它StreamBuilder&lt;List&lt;String&gt;&gt;
    • 您将 List 传递给 labelText 参数。你应该传递字符串。 (例如snapshot.data.toString()
    • 您不会在构建器中检查您的流是否有数据。您可以使用snapshot.hasData 条件或设置initialData 参数来完成。

    【讨论】:

    • 为什么打印值 null ?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 2020-03-30
      • 1970-01-01
      • 2021-05-11
      • 2020-12-26
      • 2020-11-24
      • 2019-03-13
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多