downloadAndUnzipImages method

Future<void> downloadAndUnzipImages()

Implementation

Future<void> downloadAndUnzipImages() async {
  const url = 'https://api.corpoamazonia.gov.co/downloads/img.zip';

  isDownloading.value = true;
  progress.value = 0;

  final dir = await getApplicationDocumentsDirectory();
  final imageDir = Directory('${dir.path}/images');
  if (!await imageDir.exists()) {
    await imageDir.create(recursive: true);
  }

  try {
    final dio = Dio(BaseOptions(
      connectTimeout: const Duration(minutes: 2),
      receiveTimeout: const Duration(minutes: 5),
      responseType: ResponseType.bytes,
    ));

    final response = await dio.get<List<int>>(url, onReceiveProgress: (r, t) {
      if (t != 0) progress.value = r / t;
    });

    final zipBytes = response.data!;
    final archive = ZipDecoder().decodeBytes(zipBytes);

    for (final file in archive) {
      if (!file.isFile) continue;
      final outPath = '${imageDir.path}/${file.name}';
      final outFile = File(outPath);
      await outFile.create(recursive: true);
      await outFile.writeAsBytes(file.content as List<int>);
    }
  } finally {
    isDownloading.value = false;
  }
}