在移动开发中,"选择图片/视频" 是高频需求。无论是社交应用的发布动态,还是工具类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在不同平台的表现可能略有差异。
️避坑指南:常见问题
-
权限问题 :
iOS需在
Info.plist添加相册和相机权限描述;Android需动态申请CAMERA和WRITE_EXTERNAL_STORAGE权限。 -
文件路径失效 :
获取的路径可能是缓存路径,建议立即读取字节流或复制到持久化目录。
-
Android压缩问题 :
通过
imageQuality参数控制压缩比例(默认100不压缩)。