Flutter:如何使用photo_manager获取指定相册?
获取指定名称相册的图片(photo_manager库)
要获取指定名称的相册,你不需要依赖FilterOptionGroup,直接遍历PhotoManager.getAssetPathList返回的相册列表,通过每个相册的name属性匹配目标名称即可。
修改后的完整代码
class Gallery extends StatefulWidget { const Gallery({Key? key}) : super(key: key); @override State<Gallery> createState() => _GalleryState(); } class _GalleryState extends State<Gallery> { List<AssetEntity> assets = []; _fetchAssets() async { const targetAlbumName = "你的目标相册名称"; // 替换为实际要找的相册名 final FilterOptionGroup filter = FilterOptionGroup(); final albums = await PhotoManager.getAssetPathList( type: RequestType.image, filterOption: filter, ); // 筛选出指定名称的相册(存在则返回,不存在抛出异常) final targetAlbum = albums.firstWhere( (album) => album.name == targetAlbumName, orElse: () => throw Exception("未找到名为'$targetAlbumName'的相册"), ); // 若需要兼容相册不存在的场景,可替换为以下容错逻辑: // final targetAlbum = albums.where((album) => album.name == targetAlbumName).firstOrNull; // if (targetAlbum == null) { // print("未找到指定相册"); // return; // } final recentAssets = await targetAlbum.getAssetListRange( start: 0, end: 50000, ); setState(() { assets = recentAssets; }); } @override void initState() { _fetchAssets(); super.initState(); } @override Widget build(BuildContext context) { // 示例:用GridView展示相册内图片 return Scaffold( body: GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, ), itemCount: assets.length, itemBuilder: (context, index) { return FutureBuilder( future: assets[index].thumbnailData, builder: (context, snapshot) { if (snapshot.hasData) { return Image.memory(snapshot.data!, fit: BoxFit.cover); } return const Center(child: CircularProgressIndicator()); }, ); }, ), ); } }
关键说明
- 每个
AssetPathEntity(相册对象)的name属性对应系统中显示的相册名称,直接通过字符串相等判断即可定位目标相册。 - 若能确定目标相册一定存在,用
firstWhere快速获取;如果需要处理相册不存在的情况,推荐用firstOrNull配合空判断做容错处理,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Wleeches
相关产品推荐
相关产品推荐

