Flutter每日库: image_picker选取相册图片视频

在移动开发中,"选择图片/视频" 是高频需求。无论是社交应用的发布动态,还是工具类App的头像上传,都离不开这个功能。

Flutter官方推荐的 image_picker 插件,凭借其跨平台兼容性简洁API设计,成为开发者的首选。它支持:

  • 📸 拍照或从相册选图
  • 🎥 录制视频或选择视频
  • 🌟 多文件混合选择(图片+视频)

今天我们将通过6个核心场景案例,带你彻底掌握它的用法!


快速集成:添加依赖

pubspec.yaml 中添加最新版本依赖(以v1.0.4为例):

yaml 复制代码
dependencies:
  image_picker: ^1.0.4

🎯 核心功能代码详解

1️⃣ 从相册选择单张图片

dart 复制代码
final XFile? image = await picker.pickImage(source: ImageSource.gallery);
debugPrint("图片路径:${image?.path},文件名:${image?.name}");
  • 适用场景:用户头像上传、图片分享
  • 注意 :iOS需要配置 NSPhotoLibraryUsageDescription 权限描述!

2️⃣ 调用相机拍摄照片

dart 复制代码
final XFile? photo = await picker.pickImage(source: ImageSource.camera);
debugPrint("照片路径:${photo?.path}");

3️⃣ 从相册选择视频

dart 复制代码
final XFile? galleryVideo = await picker.pickVideo(source: ImageSource.gallery);
debugPrint("视频路径:${galleryVideo?.path}");
  • 扩展功能 :结合 video_player 插件实现预览功能。

4️⃣ 录制短视频

dart 复制代码
final XFile? cameraVideo = await picker.pickVideo(source: ImageSource.camera);
debugPrint("视频路径:${cameraVideo?.path}");
  • 注意:Android可能需要额外处理视频录制时长限制。

5️⃣ 多图批量选择(最多20张)

dart 复制代码
final List<XFile> images = await picker.pickMultiImage();
for (var item in images) {
  debugPrint("图片路径:${item.path}");
}
  • 亮点:无需循环调用,一次操作即可获取多图!

6️⃣ 混合选择媒体文件(图片+视频)

dart 复制代码
// 选择单个文件
final XFile? media = await picker.pickMedia();

// 选择多个文件
final List<XFile> medias = await picker.pickMultipleMedia();
  • 跨平台提示pickMultipleMedia 在不同平台的表现可能略有差异。

避坑指南:常见问题

  1. 权限问题

    iOS需在 Info.plist 添加相册和相机权限描述;Android需动态申请 CAMERAWRITE_EXTERNAL_STORAGE 权限。

  2. 文件路径失效

    获取的路径可能是缓存路径,建议立即读取字节流或复制到持久化目录。

  3. Android压缩问题

    通过 imageQuality 参数控制压缩比例(默认100不压缩)。

相关推荐
kTR2hD1qb13 小时前
Flutter 复杂拖拽排序实战:同源排序 + 跨容器拖拽完整落地
flutter
jingling55514 小时前
Flutter | Dio网络请求实战
android·开发语言·前端·flutter
stringwu16 小时前
Flutter 复杂拖拽排序实战:同源排序 + 跨容器拖拽完整落地
flutter
UnicornDev18 小时前
【Flutter x HarmonyOS 6】设置页面的UI设计
flutter·ui·华为·harmonyos·鸿蒙
G_dou_18 小时前
Flutter+OpenHarmony实战:XMB Tracke
flutter·harmonyos·鸿蒙
●VON1 天前
鸿蒙Flutter实战:分类管理页BottomSheet CRUD
数据库·flutter·华为·harmonyos·鸿蒙
woodWu1 天前
Flutter 复杂拖拽排序实战:同源排序 + 跨容器拖拽完整落地
flutter
小小小小小鹿1 天前
Vibe Coding 实战:Flutter 自定义路径布局
flutter·vibecoding
程序员老刘1 天前
Dart 3.12 更新要点:乏善可陈
flutter·ai编程·dart
●VON1 天前
鸿蒙Flutter实战:水平滑动分类标签筛选栏
flutter·华为·harmonyos