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之使用系统中的相机功能(拍照保存照片显示拍摄的照片照片保存到图库等操作)