[英]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<List<String>>
snapshot.data.toString()
)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.