Как сделать так, чтобы длительный асинхронный процесс сообщал о своем прогрессе на экране в Flutter

#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
          )
      }
}