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需动态申请 CAMERA 和 WRITE_EXTERNAL_STORAGE 权限。

  2. 文件路径失效 :

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

  3. Android压缩问题 :

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

相关推荐
恋猫de小郭7 小时前
Flutter 官方表示:AI 时代代码越来越容易写,为什么还要一套代码库?
android·前端·flutter
喵个咪1 天前
GoWind ShortPlay 拆解:Flutter 沉浸式 Feed 的播放器工程——生命周期、手势状态机与游客降级
前端·flutter·架构
恋猫de小郭2 天前
Flutter 的文字为什么比 SwiftUI 更细?问题主要在 Skia 的 256 项查找表里
android·前端·flutter
好的佩奇3 天前
Dart 之类型系统
flutter·dart
恋猫de小郭3 天前
Dart 3.15 新特性:this 终于支持类型提升了
android·前端·flutter
FungLeo4 天前
成为全栈·Flutter App 篇·主题与可访问性:深浅色、大字号和触控体验
flutter·移动开发·深色模式·可访问性·成为全栈·大字号适配
用户95421573334855 天前
只是选个照片,怎么留下了这么多访问记录?Flutter 图片选择器排查与优化实录
flutter
FungLeo5 天前
成为全栈·Flutter App 篇·第四批复盘:复用了什么,移动端又新增了什么
flutter·移动开发·跨端开发·成为全栈·api契约·全栈复盘
jason.zeng@15022075 天前
使用vscode+flutter开发android程序(入门)
android·vscode·flutter