#dart #async-await #future #progress
Вопрос:
Я обрабатываю 10 000 предметов из коллекции, и это занимает время (скажем, 10 секунд). Я не хочу, чтобы мое приложение зависало, поэтому я разделил свой список на список пакетов и обработал каждую партию в будущем.
Моя цель-обновить экран, чтобы отмечать прогресс после каждой обрабатываемой партии.
Но экран никогда не обновляется до конца.
Код выглядит следующим образом:
class DownloaderModel extends ChangeNotifier {
/// Processes PDV
void processPdv(XmlElement pdv) {
// Long process here
}
/// Processes the batch of PDV
Future<void> processBatches(List<List<XmlElement>> batches, pdvsCount) async {
// == Now processes each bacth as a future
batches.forEach((batch) async {
await Future(() {
batch.forEach((pdv) {
processPdv(pdv);
});
// == Give feedback to the user
_progress =
(stagesCount count / pdvsCount.length * (100 - stagesCount)) /
100;
notifyListeners();
//}
});
});
}
/// Starts download procress
Future<void> startProcessing() async {
// == Batches of 200 items
List<List<XmlElement>> batches = [
// список PDV здесь
];
await processBatches(batches);
_progress = 100;
notifyListeners();
print('Processedcompleted');
}
return ViewModelBuilder<DownloaderModel>.reactive(
viewModelBuilder: () => GasStationsDownloaderModel(),
builder: (context, model, child) => Column(
// the code here
)
}
}