createAssetEntityAndPop method
When users confirm to use the taken file, create the AssetEntity.
While the entity might returned null, there's no side effects if popping null
because the parent picker will ignore it.
Implementation
Future<void> createAssetEntityAndPop() async {
if (isSavingEntity) {
return;
}
setState(() {
isSavingEntity = true;
});
// Handle the explicitly entity saving method.
if (widget.pickerConfig.onEntitySaving != null) {
try {
await widget.pickerConfig.onEntitySaving!(
context,
widget.viewType,
File(widget.previewXFile.path),
);
} catch (e, s) {
handleErrorWithHandler(e, s, onError);
} finally {
safeSetState(() {
isSavingEntity = false;
});
}
return;
}
AssetEntity? entity;
try {
final PermissionState ps = await PhotoManager.requestPermissionExtend();
if (ps == PermissionState.authorized || ps == PermissionState.limited) {
final filePath = previewFile.path;
switch (widget.viewType) {
case CameraPickerViewType.image:
entity = await PhotoManager.editor.saveImageWithPath(
filePath,
title: path.basename(filePath),
);
break;
case CameraPickerViewType.video:
entity = await PhotoManager.editor.saveVideo(
previewFile,
title: path.basename(filePath),
);
break;
}
if (widget.pickerConfig.shouldDeletePreviewFile &&
previewFile.existsSync()) {
previewFile.delete().catchError((e, s) {
handleErrorWithHandler(e, s, onError);
return previewFile;
});
}
return;
}
handleErrorWithHandler(
StateError(
'Permission is not fully granted to save the captured file.',
),
StackTrace.current,
onError,
);
} catch (e, s) {
realDebugPrint('Saving entity failed: $e');
handleErrorWithHandler(e, s, onError);
} finally {
safeSetState(() {
isSavingEntity = false;
});
if (mounted) {
Navigator.of(context).pop(entity);
}
}
}