我正在尝试使用 StreamBuilder 从流中读取一些数据,但 snapshot.data 仅返回流中的最后一项。在这种情况下,我只得到“f”。我想要得到'a','b','c','d','e','f'。我做错了什么?
class ProgressWidget extends StatefulWidget {
//ProgressWidget({this.stream}) : super();
//final Stream<String> stream;
@override
_ProgressWidgetState createState() => _ProgressWidgetState();
}
class _ProgressWidgetState extends State<ProgressWidget> {
int _progressCount = 0;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: Stream.fromIterable(['a', 'b', 'c', 'd', 'e', 'f']), // test stream
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
_progressCount++;
if (snapshot.hasData) {
print(snapshot.data);
}
return snapshot.hasData
? new Text('Progress $_progressCount ' + snapshot.data)
: new Text('Loading ... ');
});
}
}
最佳答案
试试这个:
class _ProgressWidgetState extends State<ProgressWidget> {
int _progressCount = 0;
Stream<String> _stream;
List<String> _source = ['a', 'b', 'c', 'd', 'e', 'f'];
@override
void initState() {
super.initState();
_stream = Stream.periodic(Duration(seconds: 1), (i) => _source[i]).take(_source.length);
}
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: _stream, // test stream
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
_progressCount++;
return snapshot.hasData ? new Text('Progress $_progressCount ' + snapshot.data) : new Text('Loading ... ');
},
);
}
}
关于flutter - StreamBuilder 未按预期从 Stream 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61699700/