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