saveImage static method

Future<void> saveImage(
  1. BuildContext context, {
  2. required ByteData byteData,
  3. required String fileName,
  4. required String successMessage,
  5. GeneralResponseCallback? onSuccess,
  6. 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);
    }
  }
}