我在列表中添加了两项,然后将列表添加到接收器。
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;
修改
使用建议答案后,它将输出空值。为什么会这样呢?
答案 0 :(得分:1)
首先,snapshot.data
是String项的列表,因此要将列表显示为单个String,您需要添加toString();
,其次,您需要更具体地说明类型-您需要指定您的StreamBuilder需要什么数据,即
StreamBuilder<List<String>>(
stream: _abcBloc.listStream,
builder: (context, snapshot) {
return TextField(
decoration: InputDecoration(
labelText: snapshot.data.toString(),
));
},
),
以您的示例为例,并进行了两项更改,结果[Electrical, Inspection]
显示在设备的文本字段中。
答案 1 :(得分:0)
我看到的问题:
StreamBuilder<List<String>>
snapshot.data.toString()
)snapshot.hasData
条件或设置initialData参数来实现。答案 2 :(得分:0)
我能够修复它。我所做的就是将列表和流放在didChangeDependencies
中。
@override
void didChangeDependencies() {
_abcBloc = Provider.of<AbcBloc>(context);
list.add('Electrical');
list.add('Inspection');
_abcBloc.listSink.add(list);
super.didChangeDependencies();
}