我想使用Stream从文件中加载数据并更新进度状态,但是setState无法正常工作。
我希望状态设置为1,然后2,然后3,但最后只将其设置为0到3。 setState不会立即调用build。
我已经尝试过stream.listen和ondata,但是没有运气。不知道我该怎么做,或者我做错了什么。
更新:从我一直在阅读的内容中,我将不得不更深入地研究提供程序或堆栈体系结构。看来解决了这个问题。如果有人有解决方案,请告诉我。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as Path;
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
int _progressCount = 0;
Stream<String> _stream;
@override
void initState() {
_stream = Stream.fromIterable(['a', 'b', 'c', 'd', 'e', 'f']);
super.initState();
}
@override
Widget build(BuildContext context) {
print('build called');
return Scaffold(
appBar: AppBar(),
body: Center(
child: Column(
children: <Widget>[
Text('Progress $_progressCount'), // I want this to be set to 0,1,2,3
RaisedButton(
onPressed: () async {
print(_progressCount);
int i = 0;
//test 1
await _stream.forEach((line) {
i++;
if (i % 2 == 0) {
print(line);
setState(() {
// this is not triggering build function
_progressCount = _progressCount + 1;
});
}
});
},
child: Text('Process'),
)
],
)));
}
}