saveFile method

Future saveFile(
  1. NsgFilePickerObject fileObject, {
  2. String? customFileName,
  3. String? customPrefix,
})

Implementation

Future saveFile(NsgFilePickerObject fileObject, {String? customFileName, String? customPrefix}) async {
  FileType fileType = FileType.any;
  switch (fileObject.fileType) {
    case NsgFilePickerObjectType.image:
      fileType = FileType.image;
      break;
    case NsgFilePickerObjectType.video:
      fileType = FileType.video;
      break;
    case NsgFilePickerObjectType.pdf:
      fileType = FileType.any;
      break;
    default:
      fileType = FileType.any;
  }
  if (!kIsWeb) {
    if (!GetPlatform.isAndroid && !GetPlatform.isIOS) {
      var fileName = await FilePicker.platform.saveFile(
        dialogTitle: tran.save_file,
        type: fileType,
        allowedExtensions: [extension(fileObject.filePath).replaceAll('.', '')],
      );
      if (fileName == null) return;
      var ext = extension(fileName);
      if (ext.isEmpty) {
        fileName += extension(fileObject.filePath);
      }

      dio.Dio io = dio.Dio();
      await io.download(fileObject.filePath, fileName, onReceiveProgress: (receivedBytes, totalBytes) {});
      //fileName = '/Users/zenalex/Downloads/ttt.docx';
      fileName = Uri.encodeFull(fileName);
      await launchUrlString('file:$fileName');
    } else {
      String fileName = customFileName ?? '${customPrefix ?? savePrefix}${extension(fileObject.filePath)}';
      Directory appDir;
      if (Platform.isIOS) {
        appDir = await getApplicationDocumentsDirectory();
      } else {
        appDir = Directory('/storage/emulated/0/Download');
      }

      String filePath = '${appDir.path}/$fileName';
      dio.Dio io = dio.Dio();
      await io.download(fileObject.filePath, filePath, onReceiveProgress: (receivedBytes, totalBytes) {});
    }
  }
  if (kIsWeb) {
    try {
      final response = await http.get(Uri.parse(fileObject.filePath));

      if (response.statusCode == 200) {
        final blob = html.Blob([response.bodyBytes]);

        final url = html.Url.createObjectUrlFromBlob(blob);

        final anchor = html.AnchorElement(href: url)
          ..setAttribute("download", customFileName ?? '${customPrefix ?? savePrefix}${extension(fileObject.filePath)}');
        anchor.click();

        html.Url.revokeObjectUrl(url);
      } else {
        Get.snackbar(tran.failed_download, tran.failed_download_try_again);
      }
    } catch (e) {
      Get.snackbar(tran.error, '${tran.error_file_download}: $e');
    }
  }
}