Я хочу использовать Stream для загрузки данных из файла и обновления статуса выполнения, однако setState не работает.
Я хочу, чтобы статус был установлен на 1, затем 2, затем 3, но в конце он просто устанавливается от 0 до 3. setState не вызывает сборку сразу.
Я тоже безуспешно пробовал stream.listen и ondata. Не уверен, что мне нужно делать или что я делаю не так.
ОБНОВЛЕНИЕ: Из того, что я читал, мне придется глубже изучить архитектуру Provider или blo c. Вроде решает эту проблему. Если у кого-то есть решение, дайте мне знать.
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'),
)
],
)));
}
}