downloadFile method

Future<bool> downloadFile(
  1. String path,
  2. String url
)

Implementation

Future<bool> downloadFile(String path, String url) async {
  Dio dio = Dio();
  cancelToken = CancelToken();
  try {
    try {
      await Directory(dirname(path)).create(recursive: true);
      isDownloading.value = true;
      onDownloading.value = true;
      progressString.value = "0";
      progress.value = 0;

      await dio.download(url, path, onReceiveProgress: (rec, total) {
        progressString.value = ((rec / total) * 100).toStringAsFixed(0);
        progress.value = (rec / total).toDouble();
        log('progress: ${progressString.value}');
      }, cancelToken: cancelToken);
    } catch (e) {
      if (e is DioException && e.type == DioExceptionType.cancel) {
        log('Download canceled');
        // Delete the partially downloaded file
        try {
          final file = File(path);
          if (await file.exists()) {
            await file.delete();
            onDownloading.value = false;
            log('Partially downloaded file deleted');
          }
        } catch (e) {
          log('Error deleting partially downloaded file: $e');
        }
        return false;
      } else {
        log('Error: $e');
      }
    }
    onDownloading.value = false;
    progressString.value = "100";
    log("Download completed for $path");
    return true;
  } catch (e) {
    log("Error isDownloading: $e");
  }
  return false;
}