galleryImage method

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

Implementation

Future<List<NsgFilePickerObject>> galleryImage({bool oneFile = false}) async {
  List<NsgFilePickerObject> objectsList = [];
  String? error;
  if (kIsWeb) {
    /* ----------------------------------------------- Галерея в браузере ----------------------------------------------- */
    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) {
        Uint8List? fileBytes = element.bytes;
        String fileName = element.name;
        var fileType = getFileTypeByPath(fileName);
        if (fileType == NsgFilePickerObjectType.image) {
          var resizedBytes = Helper.imageResize(bytes: element.bytes!, maxHeight: imageMaxHeight.toInt());
          fileBytes = resizedBytes;
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              image: Image.memory(fileBytes),
              fileContent: fileBytes,
              description: basenameWithoutExtension(fileName),
              fileType: fileType,
              filePath: fileName,
            ),
          );
        } else if (fileType != NsgFilePickerObjectType.unknown) {
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              file: File(fileBytes.toString()),
              fileContent: fileBytes,
              image: null,
              description: basenameWithoutExtension(fileName),
              fileType: fileType,
              filePath: fileName,
            ),
          );
        } else {
          error = '${fileType.toString().toUpperCase()} - ${tran.unsupported_format}';
        }
      }
    }
  } else if (GetPlatform.isWindows || GetPlatform.isLinux) {
    /* --------------------------------------------- Галерея Windows и Linux -------------------------------------------- */

    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);
        Uint8List? fileContent;
        if (element.path != null) {
          fileContent = await File(element.path!).readAsBytes();
        }

        if (!GetPlatform.isLinux) {
          if (fileType == NsgFilePickerObjectType.image) {
            objectsList.add(
              NsgFilePickerObject(
                isNew: true,
                image: Image.file(File(element.name.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 (GetPlatform.isLinux) {
          if (fileType == NsgFilePickerObjectType.image) {
            objectsList.add(
              NsgFilePickerObject(
                isNew: true,
                image: Image.file(File(element.path.toString())),
                description: basenameWithoutExtension(element.path.toString()),
                fileType: fileType,
                fileContent: fileContent,
                filePath: element.path.toString(),
              ),
            );
          } 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}';
          }
        }
      }
    }

    /* ---------------------------------------------- Галерея на мобильных ---------------------------------------------- */
  } else if (GetPlatform.isMacOS) {
    /* ------------------------------------------- Галерея MacOS (файл пикер) ------------------------------------------- */
    var jpgsTypeGroup = const file.XTypeGroup(label: 'JPEGs', extensions: <String>['jpg', 'jpeg']);
    var pngTypeGroup = const file.XTypeGroup(label: 'PNGs', extensions: <String>['png']);
    var pdfTypeGroup = const file.XTypeGroup(label: 'PDFs', extensions: <String>['pdf']);
    List<XFile> result = await file.openFiles(acceptedTypeGroups: <file.XTypeGroup>[jpgsTypeGroup, pngTypeGroup, pdfTypeGroup]);

    if (result.isNotEmpty) {
      /// Если стоит ограничение на 1 файл
      if (oneFile) {
        result = [result[0]];
        objectsList.clear();
      }
      for (var element in result) {
        var fileType = getFileTypeByPath(element.path);
        var fileContent = await element.readAsBytes();
        if (fileType == NsgFilePickerObjectType.image) {
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              image: Image.file(File(element.path)),
              description: basenameWithoutExtension(element.path),
              fileType: fileType,
              fileContent: fileContent,
              filePath: element.path,
            ),
          );
        } else if (fileType != NsgFilePickerObjectType.unknown) {
          objectsList.add(
            NsgFilePickerObject(
              isNew: true,
              file: File(element.path),
              image: null,
              fileContent: fileContent,
              description: basenameWithoutExtension(element.path),
              fileType: fileType,
              filePath: element.path,
            ),
          );
        } else {
          error = '${fileType.toString().toUpperCase()} - ${tran.unsupported_format}';
        }
      }
    }
  } else {
    /* ---------------------------------------------- Галерея на мобильных ---------------------------------------------- */
    List<XFile> result = [];

    if (mobileSelectionType == NsgFilePickerObjectType.image) {
      if (oneFile) {
        var image = await ImagePicker().pickImage(
          source: ImageSource.gallery,
          imageQuality: imageQuality,
          maxWidth: imageMaxWidth,
          maxHeight: imageMaxHeight,
        );
        if (image != null) {
          result = [image];
        }
      } else {
        result = await ImagePicker().pickMultiImage(imageQuality: imageQuality, maxWidth: imageMaxWidth, maxHeight: imageMaxHeight);
      }
    } else if (mobileSelectionType == NsgFilePickerObjectType.video) {
      var video = await ImagePicker().pickVideo(source: ImageSource.gallery);
      if (video != null) {
        result = [video];
      }
    }

    /// Если стоит ограничение на 1 файл
    if (oneFile) {
      if (result.isNotEmpty) result = [result[0]];
      objectsList.clear();
    }
    for (var element in result) {
      var fileType = getFileTypeByExtension(extension(element.path).replaceAll('.', ''));

      if (fileType == NsgFilePickerObjectType.image) {
        objectsList.add(
          NsgFilePickerObject(
            isNew: true,
            image: Image.file(File(element.path)),
            description: basenameWithoutExtension(element.path),
            fileType: fileType,
            fileContent: await element.readAsBytes(),
            filePath: element.path,
            eSourceType: ESourceType.gallery,
          ),
        );
      } else if (fileType != NsgFilePickerObjectType.unknown) {
        objectsList.add(
          NsgFilePickerObject(
            isNew: true,
            file: File(element.path),
            image: null,
            fileContent: await element.readAsBytes(),
            description: basenameWithoutExtension(element.path),
            fileType: fileType,
            filePath: element.path,
          ),
        );
      } else {
        error = '${fileType.toString().toUpperCase()} - ${tran.unsupported_format}';
      }
    }
  }

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