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

相关推荐
蜡台8 小时前
Flutter 环境搭建 Dart配置
flutter·dart
落叶飘飘s16 小时前
餐饮服务与软件创新的融合:解析海底捞 APP 的 Flutter 鸿蒙开发之路
flutter·华为·harmonyos
起司喵喵20 小时前
Flutter-MacOS桌面OS系统|flutter.+window_manager客户端OS模板
flutter·macos·策略模式
Wuxiaoming1351 天前
flutter app的logo和splash logo尺寸
flutter
GitLqr1 天前
深入理解 Flutter 架构:从 Widget 到 GPU 像素的全链路解析
flutter·面试·dart
SoaringHeart1 天前
Flutter进阶|最佳实践:组件内阴影实现
前端·flutter
玛艾露贝2 天前
Supabase云同步架构:Flutter应用的数据同步策略
flutter·架构
魔力女仆2 天前
Flutter 复杂拖拽排序实战:同源排序 + 跨容器拖拽完整落地
flutter
杉氧2 天前
状态管理大对决:在 Flutter 实战中如何优雅地管理共享状态?
android·前端·flutter
恋猫de小郭2 天前
Flutter Starling : 用 Swift和 Flutter 写了一个 Linux 桌面系统,震惊我一整年
android·前端·flutter