pickFile method

Future<List<NsgFilePickerObject>> pickFile({
  1. bool oneFile = false,
})

Pick an image

Implementation

Future<List<NsgFilePickerObject>> pickFile({bool oneFile = false}) async {
  String? error;
  List<NsgFilePickerObject> objectsList = [];
  FilePickerResult? result;
  await nsgFutureProgressAndException(
    func: () async {
      result = await FilePicker.platform.pickFiles(
        type: FileType.custom,
        allowedExtensions: [...allowedFileFormats, ...allowedImageFormats, ...allowedVideoFormats],
        allowMultiple: !oneFile,
      );
    },
  );
  if (result != null) {
    for (var element in result!.files) {
      var fileType = getFileTypeByPath(element.name);

      /* ------------------------------------------------------------------- ЕСЛИ ВЕБ ------------------------------------------------------------------- */
      if (kIsWeb) {
        element.bytes!.clear();
        element.bytes!.addAll(Helper.imageResize(bytes: element.bytes!, maxHeight: imageMaxHeight.toInt(), maxWidth: imageMaxWidth.toInt()));
        var file = File(element.bytes.toString());
        if (!ignoreMaxSize && (await file.length()) > fileMaxSize) {
          error = tran.file_size_exceeded((fileMaxSize / 1024).toString());
        }
        if (fileType == NsgFilePickerObjectType.image) {
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              image: Image.network(element.path.toString()),
              description: basenameWithoutExtension(element.name),
              fileType: fileType,
              filePath: '',
            ),
          );
        } else if (fileType != NsgFilePickerObjectType.unknown) {
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              file: File(element.bytes!.toString()),
              image: null,
              description: basenameWithoutExtension(element.bytes.toString()),
              fileType: fileType,
              filePath: '',
            ),
          );
        } else {
          error = '${fileType.toString().toUpperCase()} - ${tran.unsupported_format}';
        }
        /* ----------------------------------------------------------------- Если WINDOWS ----------------------------------------------------------------- */
      } else if (GetPlatform.isWindows) {
        if (element.path != null) {
          var file = File(element.path!);
          var asBytes = await file.readAsBytes();
          if (fileType == NsgFilePickerObjectType.image) {
            asBytes = Helper.imageResize(bytes: asBytes, maxHeight: imageMaxHeight.toInt());
            if (!ignoreMaxSize && (asBytes.length) > fileMaxSize) {
              error = tran.file_size_exceeded((fileMaxSize / 1024).toString());
            }
          } else {
            if (!ignoreMaxSize && (await file.length()) > fileMaxSize) {
              error = tran.file_size_exceeded((fileMaxSize / 1024).toString());
            }
          }
          if (fileType == NsgFilePickerObjectType.image) {
            objectsList.add(
              NsgFilePickerObject(
                isNew: true,
                file: file,
                fileContent: asBytes,
                image: Image.memory(asBytes),
                description: basenameWithoutExtension(element.name.toString()),
                fileType: fileType,
                filePath: element.path ?? '',
              ),
            );
          } else if (fileType != NsgFilePickerObjectType.unknown) {
            objectsList.add(
              NsgFilePickerObject(
                isNew: true,
                file: file,
                image: null,
                description: basenameWithoutExtension(element.name),
                fileType: fileType,
                fileContent: asBytes,
                filePath: element.path ?? '',
              ),
            );
          } else {
            error = '${fileType.toString().toUpperCase()} - ${tran.unsupported_format}';
          }
        } else {
          error = '${element.path} - ${tran.path_error}';
        }
      }
      if (GetPlatform.isLinux || GetPlatform.isMacOS || GetPlatform.isAndroid || GetPlatform.isIOS) {
        Uint8List? fileContent;
        if (element.path != null) {
          fileContent = await File(element.path!).readAsBytes();
        }
        if (fileType == NsgFilePickerObjectType.image) {
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              image: Image.file(File(element.path.toString())),
              description: basenameWithoutExtension(element.name.toString()),
              fileType: fileType,
              fileContent: fileContent,
              filePath: element.path ?? '',
            ),
          );
        } else if (fileType != NsgFilePickerObjectType.unknown) {
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              file: File(element.name),
              image: null,
              fileContent: fileContent,
              description: basenameWithoutExtension(element.name),
              fileType: fileType,
              filePath: element.path ?? '',
            ),
          );
        } else {
          error = '${fileType.toString().toUpperCase()} - ${tran.unsupported_format}';
        }
      }
    }
  }

  if (error == null) {
    return (objectsList);
  } else {
    throw Exception(error);
  }
}