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);
}
}