downLoadTasks method

dynamic downLoadTasks({
  1. required List<String> url,
})

Implementation

downLoadTasks({required List<String> url}) async {
  var tempProcuess = List.generate(url.length, (index) => 0.0);
  List<Download> tempDownload = List.generate(
      url.length, (index) => Download(progress: 0.0, url: url[index]));
  var loopSuccess = 0;

  _onDownLoadTaskSubject.add(DownLoadTask(
      requestUrl: url,
      requestLoop: int.parse(
          ((tempProcuess.sum / url.length) / (100 / url.length))
              .ceilToDouble()
              .toStringAsFixed(0)),
      progress: ((tempProcuess.sum / url.length) / 100),
      isFinish: false,
      download: tempDownload));

  for (var i = 0; i < url.length; i++) {
    String savePath = await getFilePath(url[i].split("/").last);
    FileManager.deleteFile(savePath);
    tempDownload[i].localUrl = savePath;
    tempDownload[i].downloadState = DownloadState.downloading;
    Dio dio = Dio();
    dio.download(
      url[i],
      tempDownload[i].localUrl,
      onReceiveProgress: (rcv, total) {
        tempProcuess[i] = (rcv / total) * 100;
        tempDownload[i].progress = tempProcuess[i];
        _onDownLoadTaskSubject.add(DownLoadTask(
            requestUrl: url,
            requestLoop: int.parse(
                ((tempProcuess.sum / url.length) / (100 / url.length))
                    .ceilToDouble()
                    .toStringAsFixed(0)),
            progress: ((tempProcuess.sum / url.length) / 100),
            isFinish: false,
            download: tempDownload));
        // print(" ${((tempProcuess.sum/url.length)/(100/url.length)).ceilToDouble().toStringAsFixed(0)} / ${url.length} tempProcuess =>${((tempProcuess.sum/url.length)/100)}");
      },
      deleteOnError: true,
    ).then((_) {
      loopSuccess++;
      tempDownload[i].downloadState = DownloadState.finish;
      if (loopSuccess == url.length) {
        _onDownLoadTaskSubject.add(DownLoadTask(
            requestUrl: url,
            requestLoop: int.parse(
                ((tempProcuess.sum / url.length) / (100 / url.length))
                    .ceilToDouble()
                    .toStringAsFixed(0)),
            progress: ((tempProcuess.sum / url.length) / 100),
            isFinish: true,
            download: tempDownload));
      }
    }, onError: (e) {
      loopSuccess++;
      print("Error ${e}");
      tempDownload[i].downloadState = DownloadState.error;
      tempDownload[i].progress = 100;
      if (loopSuccess == url.length) {
        _onDownLoadTaskSubject.add(DownLoadTask(
            requestUrl: url,
            requestLoop: int.parse(
                ((tempProcuess.sum / url.length) / (100 / url.length))
                    .ceilToDouble()
                    .toStringAsFixed(0)),
            progress: ((tempProcuess.sum / url.length) / 100),
            isFinish: true,
            download: tempDownload));
      }
    });
  }
}