saveImage static method
Future<void>
saveImage(
- BuildContext context, {
- required ByteData byteData,
- required String fileName,
- required String successMessage,
- GeneralResponseCallback? onSuccess,
- GeneralResponseCallback? onError,
Implementation
static Future<void> saveImage(
BuildContext context, {
required ByteData byteData,
required String fileName,
required String successMessage,
GeneralResponseCallback? onSuccess,
GeneralResponseCallback? onError,
}) async {
final ApLocalizations ap = ApLocalizations.of(context);
try {
PermissionState hasGrantPermission = PermissionState.notDetermined;
if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) {
hasGrantPermission = await PhotoManager.requestPermissionExtend();
} else {
hasGrantPermission = PermissionState.authorized;
}
if (hasGrantPermission == PermissionState.authorized) {
final Uint8List pngBytes = byteData.buffer.asUint8List();
String downloadDir = '';
if (kIsWeb) {
downloadDir = '';
} else if (Platform.isMacOS || Platform.isWindows || Platform.isLinux) {
downloadDir = (await getDownloadsDirectory())!.path;
} else {
downloadDir = '';
}
final String filePath = path.join(downloadDir, '$fileName.png');
bool success = true;
if (kIsWeb) {
await FileSaverWeb().downloadFile(
pngBytes,
fileName,
'image/png',
);
} else if (Platform.isAndroid || Platform.isIOS) {
final String tempPath = path.join(
(await getApplicationDocumentsDirectory()).path,
filePath,
);
final File file = await File(tempPath).writeAsBytes(pngBytes);
final AssetEntity? imageEntity =
await PhotoManager.editor.saveImageWithPath(
file.path,
title: fileName,
);
file.delete();
if (kDebugMode) debugPrint(imageEntity?.title);
success = imageEntity != null;
} else {
await File(filePath).writeAsBytes(pngBytes);
}
onSuccess?.call(
success
? GeneralResponse(
statusCode: 200,
message: '$successMessage\n$filePath',
)
: GeneralResponse.unknownError(),
);
} else {
onSuccess?.call(
GeneralResponse(
statusCode: 401,
message: ap.grandPermissionFail,
),
);
}
} catch (e, s) {
if (!context.mounted) return;
ApUtils.showToast(context, ap.unknownError);
if (CrashlyticsUtils.instance == null) {
rethrow;
} else {
CrashlyticsUtils.instance?.recordError(e, s);
}
}
}