Flutter:捕获照片 - 保存到图库 - 从图库中读取照片

Posted

技术标签:

【中文标题】Flutter:捕获照片 - 保存到图库 - 从图库中读取照片【英文标题】:Flutter: Capture photo - Save to Gallery - Read photos from Gallery 【发布时间】:2020-11-28 23:57:02 【问题描述】:

我是 Flutter 的新手。 希望我下面的问题与您过去的问题相同。你可以帮助我:

我的情况是: 我的应用程序将拍摄一张照片(使用包相机:^0.5.8+2)。然后,这张照片将保存在用户设备的图库中(使用包 gallery_saver: ^2.0.1)。最后,我会打开图库(使用 package photo_manager: ^0.5.7)来挑选一些我之前拍摄的照片 ==> 这个流程真的很简单,对吧? ^_^

但是,我已经在这个问题上陷入了困境: 拍摄照片后,然后从我的应用程序打开图库,我看不到这张照片(虽然我可以在设备图库上看到这张照片)。我还在控制台上打印日志以确保:我最近的照片是由我的应用程序获取的。但是,我仍然什么也看不到,这意味着我的应用程序也无法读取这张最近的照片。

那么,我做错了什么?或者我错过了什么?请有这方面经验的朋友帮帮我!

下面是我的源代码:

这是使用相机包拍照的功能(https://pub.dev/packages/camera)

/// Take an photo
  _takePhoto() async 
    try 
      if (_numberPhotoTaken < widget.maxTaken) 
        /// Path
        var file = "$DateTime.now().toString().jpg";
        
        var temporaryDir = (await getTemporaryDirectory()).path;

        var pathSaved = join(temporaryDir, file);

        /// Take photo
        await _cameraController.takePicture(pathSaved);

        /// save to gallery
        GallerySaver.saveImage(pathSaved, albumName: galleryFolder).then((ok) 

          if (ok) 
            setState(() => _numberPhotoTaken++);
          

          /// remove temporary file
          File(pathSaved).delete();
        );
       else 
        AppDialog.inform(
            this.context,
            textLocale("Reached the maximum number of photos", this.context),
            () );
      

     on CameraException catch (e) 
      
     on Exception catch (ex) 
      
    
  

这是使用照片管理器包(https://pub.dev/packages/photo_manager)从图库中加载资产的功能

/// fetching gallery's asset
  /// return: list of asset entity in specific page
  Future<List<GalleryEntity>> _fetchGalleryPaging() async 
    /// load all assets in one album list
    List<AssetPathEntity> albums = await PhotoManager.getAssetPathList(
        onlyAll: true, type: RequestType.common);

    List<AssetEntity> page = await albums[0].getAssetListPaged(_currentPage, widget.perPage);

    /// return gallery entity list
    return page.map<GalleryEntity>((e) => GalleryEntity(asset: e)).toList();
  

我目前正在我的 Android 设备上进行测试

当我在设备上打开图库时,我想知道:我刚刚拍摄的新照片排列不正确(最新照片必须在图库末尾)。一段时间后(我不知道多少次),设备图库会自动刷新,我最近的照片会以正确的方式排列(它在图库的末尾)。我的应用程序会完美地读取这张照片(对我来说太奇怪了)

更新:还有一件事,我的照片将保存到画廊中的一个单独文件夹中

如果你读到这一行。我对此非常感激。我希望你们当中有经验来解决这个问题

谢谢大家,

【问题讨论】:

【参考方案1】:

一段时间后,我搜索了我的问题。我发现主要问题是当我拍摄照片时外部存储没有重新扫描,所以我的颤振应用程序无法在图库中显示新照片。

这个问题的解决方案是包:

https://github.com/hui-z/image_gallery_saver

我不确定这个包的效果,但对于我的场景来说,它的工作就像我希望的那样完美。

希望对和我一样面临同样问题的人有所帮助 谢谢大家

【讨论】:

以上是关于Flutter:捕获照片 - 保存到图库 - 从图库中读取照片的主要内容,如果未能解决你的问题,请参考以下文章

Android笔记67Android之使用系统中的相机功能(拍照保存照片显示拍摄的照片照片保存到图库等操作)

使用 Swift 将照片保存到图库中的文件夹

我正在将照片保存在 android 图库上,但照片保存有延迟

Flutter 如何将图像文件保存到图库中的新文件夹?

允许以编程方式访问图库照片

使用多个 CALayers 捕获 UIVIew 的屏幕截图显示白色背景,同时将图像保存在图库中