You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:45:43