Flutter : 将图片保存在图库中

Flutter : save image in gallery

提问人:AYMANE 提问时间:7/25/2023 更新时间:7/25/2023 访问量:270

问:

我希望将图像存储在图库中。但是,此功能似乎仅在调试期间起作用,当我构建 APK 并在手机上对其进行测试时。一旦我在没有调试的情况下安装了 APK,图像保存功能就不再起作用了。请务必注意,我已经拥有访问本地存储的必要权限。权限

我在两个版本的 Android 12 和 13 上对其进行了测试

var image = await boundary.toImage();
    var byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    var ref = FFAppState().FrameRef;
    final name = 'cl1box1_' + ref;
    await ImageGallerySaver.saveImage(byteData!.buffer.asUint8List(),
        name: name);
android flutter local-storage android-permissions image-gallery

评论

0赞 pskink 7/25/2023
pub.dev/packages/media_scanner

答:

0赞 user22213824 7/25/2023 #1

试试这个

在下面使用这个插件

  1. device_info_plus:^9.0.2

  2. permission_handler:^10.4.3

  3. image_gallery_saver:^2.0.3

    saveImage() async {
    PermissionStatus result;
    if (Platform.isAndroid) {
      DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
      AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
      if (androidInfo.version.sdkInt >= 33) {
        result = await Permission.photos.request();
      } else {
        result = await Permission.storage.request();
      }
    if (result.isGranted) {
    
    var image = await boundary.toImage();
    var byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    var ref = FFAppState().FrameRef;
    final name = 'cl1box1_' + ref;
    await ImageGallerySaver.saveImage(byteData!.buffer.asUint8List(),
        name: name);
      }
    
    } else {
      await openAppSettings();
    }
     }
    

在AndroidManifest.xml上添加此代码

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>