Flutter Image Picker 插件

Android iOS
支持 SDK 21+ 11.0+

简化您 Flutter 应用中的媒体选择、裁剪和相机功能。轻松从库中选择图片/视频,裁剪图片,以及拍摄新照片/视频。

Picker iOS
Picker Android

安装

$ flutter pub add hl_image_picker

注意:如果您仅为 AndroidiOS 开发应用程序,则无需安装 hl_image_picker。您可以根据目标平台选择以下任一包:

设置

要使用该插件,您需要执行以下设置步骤

iOS
  1. Privacy Description 添加到您的 ios/Runner/Info.plist 文件中。

<key>NSPhotoLibraryUsageDescription</key>
<string>This app requires access to the photo library</string>

<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera</string>

<!-- Include this description only if your plugin requires recording videos and needs access to the device's microphone. -->
<key>NSMicrophoneUsageDescription</key>
<string>This app requires access to the microphone</string>

iOS 14 您可以通过将 Info.plist 中的 PHPhotoLibraryPreventAutomaticLimitedAccessAlert 设置为 yes 来禁止系统自动提示。

<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
<true/>

PHPhotoLibraryPreventAutomaticLimitedAccessAlert

  1. (可选) 如果您想本地化相机,请打开 Xcode,转到 Info 选项卡,然后为相机添加缺失的本地化设置。

localize camera

Android
  1. 确保在您的 android/app/build.gradle 文件中将 minSdkVersion 设置为 21 或更高版本。

android {
    ...
    defaultConfig {
        minSdkVersion 21
        ...
    }
}
  1. 将权限添加到您的 AndroidManifest.xml 文件中。

<!-- Android 12 and lower -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- Targeting Android 13 or higher -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

<!-- Request the camera permission -->
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />

<!-- Add this permission if you need to record videos -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />

用法

从图库中选择图片/视频

import 'package:hl_image_picker/hl_image_picker.dart';

final _picker = HLImagePicker();

List<HLPickerItem> _selectedImages = [];

_openPicker() async {
    final images = await _picker.openPicker(
        // Properties
    );
    setState(() {
        _selectedImages = images;
    });
}

属性

属性 描述 类型
selectedIds 一个字符串 ID 列表,表示从图库中最初选中的图片或视频。这允许用户在打开选择器之前预先选择项目。 [String]
pickerOptions 选择器的附加选项 HLPickerOptions
cropping 指示是否启用裁剪。仅当 mediaType = MediaType.imagemaxSelectedAssets = 1 时有效。 布尔值
cropOptions 裁剪功能的配置选项 HLCropOptions
localized 为插件显示的自定义文本 LocalizedImagePicker

拍摄照片或录制视频

import 'package:hl_image_picker/hl_image_picker.dart';

final _picker = HLImagePicker();

HLPickerItem? _selectedImage;

_openCamera() async {
    final image = await _picker.openCamera(
        // Properties
    );
    setState(() {
        _selectedImage = image;
    });
}

属性

属性 描述 类型
cameraOptions 相机功能的附加选项 HLCameraOptions
cropping 指示是否启用裁剪 布尔值
cropOptions 裁剪功能的配置选项 HLCropOptions
localized 为插件显示的自定义文本 LocalizedImageCropper

打开图片裁剪器

import 'package:hl_image_picker/hl_image_picker.dart';

final _picker = HLImagePicker();

HLPickerItem? _selectedImage;

_openCropper_() async {
    final image = await _picker.openCropper("image_path_to_crop",
    // Properties
    );
    setState(() {
        _selectedImage = image;
    });
}

属性

属性 描述 类型
imagePath 需要裁剪的图片的路径 字符串
cropping 指示是否启用裁剪 布尔值
cropOptions 裁剪功能的配置选项 HLCropOptions
localized 为插件显示的自定义文本 LocalizedImageCropper
Picker iOS
Picker iOS Circular
Picker Android
Picker Android Circular

HLPickerOptions

属性 描述 默认值
mediaType 您想要选择的媒体类型:MediaType.imageMediaType.videoMediaType.all MediaType.all
maxSelectedAssets 可以选中的最大项目数。 1
minSelectedAssets 必须选中的最小项目数。
maxFileSize 允许选中的最大文件大小。
minFileSize 选中的最小文件大小。
enablePreview 启用或禁用预览功能。(Android 上为长按,iOS 上为长按
convertHeicToJPG 选中时将 HEIC 格式的图片转换为 JPEG 格式。(仅限 iOS)
convertLivePhotosToJPG 选中时将 Live Photos 转换为 JPEG 格式。(仅限 iOS)
recordVideoMaxSecond 录制视频的最大时长(秒)。 60
isExportThumbnail 决定是否为选中的视频导出缩略图。
thumbnailCompressQuality 导出缩略图的压缩质量(0.1-1)。 0.9
thumbnailCompressFormat 导出缩略图的图片格式:CompressFormat.jpgCompressFormat.png CompressFormat.jpg
maxDuration 选中视频的最大时长(秒)。
minDuration 选中视频的最小时长(秒)。
numberOfColumn 选择器列表中每行显示的条目数。 3
usedCameraButton 决定是否在选择器列表中显示相机按钮。

HLCropOptions

属性 描述 默认值
aspectRatio 指定裁剪所需的纵横比。
aspectRatioPresets 提供一组预定义的裁剪纵横比选项。
compressQuality 确定导出图片的压缩质量(0.1-1)。 0.9
compressFormat 指定导出图片的图片格式:CompressFormat.jpgCompressFormat.png CompressFormat.jpg
croppingStyle 裁剪样式:CroppingStyle.normalCroppingStyle.circular CroppingStyle.normal
maxSizeOutput 设置导出图片的最大宽度和最大高度。

HLCameraOptions

属性 描述 默认值
cameraType 指定要使用的相机类型:CameraType.videoCameraType.image CameraType.image
recordVideoMaxSecond 录制视频的最大时长(秒)。 60
isExportThumbnail 决定是否为录制的视频导出缩略图。
thumbnailCompressQuality 导出缩略图的压缩质量(0.1-1)。 0.9
thumbnailCompressFormat 导出缩略图的图片格式:CompressFormat.jpgCompressFormat.png CompressFormat.jpg

HLPickerItem (Response)

属性 描述 类型
path 项目的路径。 字符串
id 项目的唯一标识符。 字符串
名称 项目的文件名。 字符串
mimeType 项目的 MIME 类型。 字符串
size 项目的大小(以 KB 为单位)。 整数
width 项目的宽度 整数
高度 项目的高度 整数
类型 指示项目是 image 还是 video 字符串
duration 视频的时长 double?
thumbnail 视频缩略图的路径 String?

LocalizedImagePicker

属性 描述 默认值
maxDurationErrorText 当选中的视频超过最大时长时显示的错误消息。 视频时长超出最大限制
minDurationErrorText 当选中的视频时长小于最小时长时显示的错误消息。 视频太短
maxFileSizeErrorText 当选中的文件超过最大文件计时显示的错误消息。 文件大小超出最大限制
minFileSizeErrorText 当选中的文件小于最小文件计时显示的错误消息。 文件大小太小
noAlbumPermissionText 当应用程序没有权限访问相册时显示的错误消息。 没有访问相册的权限
noCameraPermissionText 当应用程序没有权限访问相机时显示的错误消息。 没有访问相机的权限
maxSelectedAssetsErrorText 当超出最大选中项目数时显示的错误消息。 超出最大选中项目数
minSelectedAssetsErrorText 当未满足最小选中项目数时显示的错误消息。 需要至少选择 {minSelectedAssets} 个
noRecordAudioPermissionText 当应用程序没有权限录制音频时显示的错误消息。 没有录制音频的权限
doneText “完成”按钮上显示的文本。 已完成
cancelText “取消”按钮上显示的文本。 取消
loadingText 选择器处于加载状态时显示的文本。 加载
defaultAlbumName 默认相册的名称。 最近
tapHereToChangeText defaultAlbumName 下显示的文本。(仅限 iOS) 点击此处更改
okText “确定”按钮上显示的文本。 确定
emptyMediaText 没有可用媒体时显示的文本。(仅限 iOS) 没有可用的媒体
cropDoneText “完成”按钮上显示的文本。(仅限 iOS) 已完成
cropCancelText “取消”按钮上显示的文本。(仅限 iOS) 取消
cropTitleText 裁剪图片屏幕上显示的标题。(仅限 iOS)

LocalizedImageCropper

属性 描述 默认值
cropDoneText “完成”按钮上显示的文本。(仅限 iOS) 已完成
cropCancelText “取消”按钮上显示的文本。(仅限 iOS) 取消
cropTitleText 裁剪图片屏幕上显示的标题。(仅限 iOS)

ProGuard

-keep class com.luck.picture.lib.** { *; }
-dontwarn com.yalantis.ucrop**
-keep class com.yalantis.ucrop** { *; }
-keep interface com.yalantis.ucrop** { *; }

开源库

iOS: TLPhotoPickerTOCropViewController

Android: PictureSelector

GitHub

查看 Github