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不压缩)。

相关推荐
程序员老刘·1 天前
Android Studio Otter 3 发布:日常开发选AS还是Cursor?
flutter·android studio·ai编程·跨平台开发·客户端开发
浩辉_1 天前
Dart - 内存管理与垃圾回收(GC)深度解析
flutter·dart
一起养小猫1 天前
Flutter for OpenHarmony 实战:记忆棋游戏完整开发指南
flutter·游戏·harmonyos
Betelgeuse761 天前
【Flutter For OpenHarmony】TechHub技术资讯界面开发
flutter·ui·华为·交互·harmonyos
铅笔侠_小龙虾1 天前
Flutter 安装&配置
flutter
mocoding1 天前
使用已经完成鸿蒙化适配的Flutter本地持久化存储三方库shared_preferences让你的应用能够保存用户偏好设置、缓存数据等
flutter·华为·harmonyos·鸿蒙
无熵~1 天前
Flutter入门
flutter
hudawei9961 天前
要控制动画的widget为什么要with SingleTickerProviderStateMixin
flutter·mixin·with·ticker·动画控制
jian110581 天前
flutter dio 依赖,dependencies 和 dev_dependencies的区别
flutter
王码码20351 天前
Flutter for OpenHarmony 实战之基础组件:第十七篇 滚动进阶 ScrollController 与 Scrollbar
flutter·harmonyos