Flutter图像选择器插件drishya_picker的使用
Flutter图像选择器插件drishya_picker的使用
这是一个Flutter包,它模仿了Facebook Messenger的图库选择器和相机功能,并将它们合并为一个组件。图库视图和相机视图也可以作为Flutter小部件使用。在底层,drishya_picker 使用了Photo Manager 和 Camera。
目录
安装
1. 添加依赖
在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
drishya_picker: ^latest_version
2. 安装它
你可以通过命令行来安装包:
使用 pub
:
$ pub get
使用 Flutter
:
$ flutter pub get
3. 导入它
现在可以在Dart代码中使用:
import 'package:drishya_picker/drishya_picker.dart';
平台设置
对于更多细节(如果需要),你可以查看 Photo Manager 和 Camera 的文档部分。
Android
将最低Android SDK版本改为21(或更高)在你的android/app/build.gradle
文件中。
minSdkVersion 21
所需的权限:INTERNET
, READ_EXTERNAL_STORAGE
, WRITE_EXTERNAL_STORAGE
, ACCESS_MEDIA_LOCATION
。
如果你不需要 ACCESS_MEDIA_LOCATION
权限,
参见禁用 ACCESS_MEDIA_LOCATION 权限。
Glide
Android原生使用Glide创建图像缩略图字节,版本为4.11.0。
如果你的其他Android库使用了该库,且版本不同,则需要编辑你的Android项目的build.gradle
文件。
rootProject.allprojects {
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.github.bumptech.glide'
&& details.requested.name.contains('glide')) {
details.useVersion '4.11.0'
}
}
}
}
}
如果你想要使用ProGuard,可以参见Glide的ProGuard。
移除媒体位置权限
Android默认包含 ACCESS_MEDIA_LOCATION
权限。
此权限是在Android Q中引入的。如果你的应用不需要此权限,你需要在应用的Android清单中添加以下节点:
<uses-permission
android:name="android.permission.ACCESS_MEDIA_LOCATION"
tools:node="remove"
/>
如果你发现有关于 Glide
的警告日志,
那么主项目需要实现 AppGlideModule
。
参见生成API。
iOS
在info.plist
中添加以下内容:
<key>NSPhotoLibraryUsageDescription</key>
<string>Replace with your permission description..</string>
<key>NSCameraUsageDescription</key>
<string>Replace with your permission description..</string>
<key>NSMicrophoneUsageDescription</key>
<string>Replace with your permission description..</string>
图库
- 使用
SlidableGallery
使图库视图可滑动,否则忽略它。
class PickerDemo extends StatelessWidget {
late final GalleryController controller;
...
@override
Widget build(BuildContext context) {
return SlidableGallery(
controller: controller,
child: Scaffold(
body: ...
),
);
}
}
GallerySetting
可用于在选择媒体时进行额外设置。
class PickerDemo extends StatelessWidget {
late final GalleryController controller;
@override
void initState() {
super.initState();
controller = GalleryController();
}
final _gallerySetting = GallerySetting(
enableCamera: true,
maximumCount: 10,
requestType: RequestType.all,
editorSetting: EditorSetting(colors: _colors, stickers: _stickers1),
cameraSetting: const CameraSetting(videoDuration: Duration(seconds: 15)),
cameraTextEditorSetting: EditorSetting(
backgrounds: _defaultBackgrounds,
colors: _colors.take(4).toList(),
stickers: _stickers2,
),
cameraPhotoEditorSetting: EditorSetting(
colors: _colors.skip(4).toList(),
stickers: _stickers3,
),
);
...
onPressed : () async {
final entities = await controller.pick(context,setting:setting);
}
...
}
- 使用
GalleryViewField
类似于Flutter的TextField
来选择媒体。(推荐方法,因为它已经处理了控制器的创建和销毁)
GalleryViewField(
selectedEntities: [],
onChanged: (entity, removed) {
...
},
onSubmitted: (list) {
...
}
child: const Icon(Icons.camera),
),
- 你也可以将
GalleryView
作为一个Widget
使用。 - 浏览示例应用程序以获取更深入的实现和定制。
相机
- 使用
CameraView
的pick()
函数来选择媒体。
...
onPressed : () async {
final entity = await CameraView.pick();
}
...
- 使用
CameraViewField
类似于Flutter的TextField
来选择媒体。
GalleryViewField(
onCapture: (entity) {
...
},
child: const Icon(Icons.camera),
),
更多关于Flutter图像选择器插件drishya_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图像选择器插件drishya_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用drishya_picker
图像选择器插件的详细步骤和代码示例。drishya_picker
是一个功能强大的图像选择器插件,支持多种图像选择和预览功能。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加drishya_picker
的依赖。
dependencies:
flutter:
sdk: flutter
drishya_picker: ^latest_version # 请确保使用最新版本号
运行以下命令来安装依赖:
flutter pub get
2. 导入插件
在你的Dart文件中导入drishya_picker
。
import 'package:drishya_picker/drishya_picker.dart';
3. 配置权限
由于图像选择器需要访问设备的存储,你需要在AndroidManifest.xml
和Info.plist
中配置相关权限。
Android
在AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
iOS
在Info.plist
中添加以下权限:
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library</string>
<key>NSCameraUsageDescription</key>
<string>We need access to your camera</string>
4. 使用DrishyaPicker
以下是一个完整的示例,展示了如何使用DrishyaPicker
来选择图像并显示它们。
import 'package:flutter/material.dart';
import 'package:drishya_picker/drishya_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ImagePickerScreen(),
);
}
}
class ImagePickerScreen extends StatefulWidget {
@override
_ImagePickerScreenState createState() => _ImagePickerScreenState();
}
class _ImagePickerScreenState extends State<ImagePickerScreen> {
List<AssetModel> images = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Drishya Picker Example'),
),
body: Column(
children: [
Expanded(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
itemCount: images.length,
itemBuilder: (context, index) {
return Image.file(
File(images[index].path),
fit: BoxFit.cover,
);
},
),
),
ElevatedButton(
onPressed: () async {
List<AssetModel> pickedImages = await DrishyaPicker.pickAssets(
context: context,
maxAssets: 10, // 最大选择数量
assetType: AssetType.image, // 仅选择图片
requestCode: 100, // 请求码
pickerConfig: PickerConfig(
showSearchBar: true, // 显示搜索框
gridColumnCount: 3, // 网格列数
),
);
if (pickedImages.isNotEmpty) {
setState(() {
images = pickedImages;
});
}
},
child: Text('Pick Images'),
),
],
),
);
}
}
5. 运行应用
完成上述步骤后,你可以运行你的Flutter应用。点击“Pick Images”按钮将打开图像选择器,选择图像后,它们将显示在网格视图中。
注意事项
- 确保你已经正确配置了所需的权限。
- 根据需要调整
PickerConfig
中的参数,以满足你的应用需求。 - 处理可能发生的错误,例如权限被拒绝的情况。
这就是如何在Flutter项目中使用drishya_picker
图像选择器插件的完整示例。希望这对你有帮助!