Flutter图片选择插件x_image_picker的使用
x_image_picker是一个用于在 Flutter 应用中选择图片和视频的插件。它基于 iOS 的 ZLPhotoBrowser
和 Android 的 PictureSelector
实现,并提供了丰富的功能来满足多平台的需求。
功能概述
- iOS: 基于
ZLPhotoBrowser
。 - Android: 基于
PictureSelector
。 - 灵感来源:
images_picker
插件。 - 视频缩略图: 使用了
video_thumbnail
插件生成视频缩略图。
Android 设置
以下是 Android 端的配置步骤:
-
修改最低 SDK 版本为
19
,文件路径为android/app/build.gradle
:defaultConfig { applicationId "com.huanshao.x_image_picker_example" minSdkVersion 19 // 修改为 19 targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName }
-
添加依赖项
androidx.camera:camera-camera2
:dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "androidx.camera:camera-camera2:1.1.0-alpha06" // 添加此行 }
-
修改
android/build.gradle
中的kotlin_version
为1.4.32
:ext.kotlin_version = '1.4.32'
-
添加自定义
Application
类,并在AndroidManifest.xml
中声明:package com.huanshao.x_image_picker_example import android.app.Application import androidx.camera.camera2.Camera2Config import androidx.camera.core.CameraXConfig import io.flutter.app.FlutterApplication class MyApplication: FlutterApplication(), CameraXConfig.Provider { override fun onCreate() { super.onCreate() } override fun getCameraXConfig(): CameraXConfig { return Camera2Config.defaultConfig(); } }
在
AndroidManifest.xml
中添加:<application android:label="x_image_picker_example" android:icon="@mipmap/ic_launcher" android:name=".MyApplication"> </application>
-
添加必要的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
iOS 设置
以下是 iOS 端的配置步骤:
-
添加权限描述:
<key>NSCameraUsageDescription</key> <string>使用相机</string> <key>NSMicrophoneUsageDescription</key> <string>使用麦克风</string> <key>NSPhotoLibraryUsageDescription</key> <string>访问相册</string>
-
限制:
- 当前不支持从 iCloud 选择视频。如果
XImagePickerArgsMediaType
为Video
且返回的cover
为null
,请在 Flutter 端处理,例如提示用户视频存储在 iCloud,无法选择。用户可以选择先下载视频,然后手动选择。
- 当前不支持从 iCloud 选择视频。如果
使用方法
使用 x_image_picker
插件选择图片或视频非常简单。以下是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:x_image_picker/x_image_picker.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized(); // 初始化 Flutter 绑定
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("图片选择测试"),
),
body: Column(
children: [
MaterialButton( // 按钮用于触发图片选择
onPressed: () async {
// 调用 x_image_picker 选择视频
final res = await XImagePicker.pickImage(XImagePickerArgs(
type: XImagePickerArgsMediaType.Video, // 选择类型为视频
recordVideoSecond: 10)); // 录制视频时间为 10 秒
print(res.toString()); // 打印返回结果
},
child: Text("选择图片"),
)
],
),
),
);
}
}
参数说明 (XImagePickerArgs
)
XImagePickerArgs
是配置图片和视频选择的核心参数类,其构造函数如下:
final int recordVideoSecond; // 视频录制时间(秒)
/// 最大选择数量
final int maxSelectNum;
/// 选择类型
final XImagePickerArgsMediaType type;
/// 是否显示拍照按钮
final bool isCamera;
XImagePickerArgs(
{this.recordVideoSecond = 60, // 默认录制 60 秒
this.maxSelectNum = 9, // 最大选择数量为 9
required this.type, // 必须指定选择类型
this.isCamera = true}); // 是否显示拍照按钮,默认为 true
返回结果 (XImagePickerResult
)
XImagePickerResult
包含选择结果的相关信息,具体结构如下:
final File file; // 选择的文件
final int width; // 文件宽度
final int height; // 文件高度
/// 封面,仅当 type 为 [XImagePickerArgsMediaType.Video] 时有效
File? cover;
更多关于Flutter图片选择插件x_image_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片选择插件x_image_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
x_image_picker
是一个 Flutter 插件,用于从设备的相册或相机中选择图片。它是对 image_picker
插件的封装,提供了更简洁的 API 和更多的功能。以下是 x_image_picker
的基本使用方法。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 x_image_picker
依赖:
dependencies:
flutter:
sdk: flutter
x_image_picker: ^latest_version
然后运行 flutter pub get
来安装依赖。
2. 配置权限
在 Android 和 iOS 上,你需要配置相应的权限来访问相机和相册。
Android
在 android/app/src/main/AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
iOS
在 ios/Runner/Info.plist
文件中添加以下权限:
<key>NSCameraUsageDescription</key>
<string>我们需要访问您的相机来拍摄照片</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>我们需要访问您的相册来选择照片</string>
3. 使用 x_image_picker
在你的 Dart 代码中,你可以使用 x_image_picker
来选择图片。
import 'package:flutter/material.dart';
import 'package:x_image_picker/x_image_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ImagePickerExample(),
);
}
}
class ImagePickerExample extends StatefulWidget {
@override
_ImagePickerExampleState createState() => _ImagePickerExampleState();
}
class _ImagePickerExampleState extends State<ImagePickerExample> {
XFile? _image;
Future<void> _pickImage() async {
final XImagePicker picker = XImagePicker();
final XFile? image = await picker.pickImage(source: ImageSource.gallery);
setState(() {
_image = image;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Picker Example'),
),
body: Center(
child: _image == null
? Text('No image selected.')
: Image.file(File(_image!.path)),
),
floatingActionButton: FloatingActionButton(
onPressed: _pickImage,
tooltip: 'Pick Image',
child: Icon(Icons.add_a_photo),
),
);
}
}
4. 选择图片
在上面的代码中,_pickImage
方法用于从相册中选择图片。你可以通过 ImageSource.camera
来从相机中拍摄照片。
final XFile? image = await picker.pickImage(source: ImageSource.camera);