Flutter图片和视频选择插件gallery_asset_picker的使用
Flutter 图片和视频选择插件 gallery_asset_picker
的使用
Gallery Asset Picker
gallery_asset_picker
是一个集成了图库选择器和相机功能的插件。图库和相机视图都可以作为 Flutter 小部件使用。
目录
截图
折叠模式 | 展开模式 |
---|---|
![]() |
![]() |
安装
1. 添加依赖
在你的项目 pubspec.yaml
文件中添加以下依赖:
dependencies:
gallery_asset_picker: ^latest_version
2. 导入
在你的 Dart 代码中导入该插件:
import 'package:gallery_asset_picker/gallery_asset_picker.dart';
配置
对于更详细的配置(如果需要),可以查看 Photo Manager 和 Camera 的文档部分。
1. Android
- 将最低的 Android SDK 版本改为 21(或更高)在你的
android/app/build.gradle
文件中:
minSdkVersion 21
- 添加所需的权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
- 使用 Glide 创建图像缩略图字节:
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'
}
}
}
}
}
- 如果你发现一些与 Glide 相关的日志警告,那么主项目需要实现
AppGlideModule
。参见 Generated API。
2. iOS
在 info.plist
文件中添加以下内容:
<key>NSPhotoLibraryUsageDescription</key>
<string>替换为您的权限描述...</string>
<key>NSCameraUsageDescription</key>
<string>替换为您的权限描述...</string>
使用
初始化图库配置
使用 GalleryAssetPicker.initialize
方法来配置图库:
GalleryAssetPicker.initialize(GalleryConfig(
enableCamera: true,
crossAxisCount: 3,
colorScheme: const ColorScheme.light(primary: Colors.blue),
onReachMaximum: () {
Fluttertoast.showToast(
msg: "You have reached the allowed number of images",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
textColor: Colors.white,
fontSize: 16.0,
);
},
textTheme: const TextTheme(
bodyMedium: TextStyle(fontSize: 16),
titleMedium: TextStyle(fontSize: 14, fontWeight: FontWeight.w700),
titleSmall: TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
),
));
滑动图库覆盖层
为了使图库视图滑动,使用 SlidableGalleryOverlay
;否则忽略它:
class SlidableGalleryDemo extends StatelessWidget {
late final GalleryController galleryController;
// 构造函数和其他逻辑...
@override
Widget build(BuildContext context) {
return SlidableGalleryOverlay(
controller: galleryController,
child: Scaffold(
body: ... // 其他内容
),
);
}
}
选择资产
使用 GalleryAssetPicker.pick()
方法来选择资产:
onPressed: () async {
final _selectedAssets = await GalleryAssetPicker.pick(
context,
maxCount: 5,
requestType: RequestType.image,
);
}
更多关于Flutter图片和视频选择插件gallery_asset_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片和视频选择插件gallery_asset_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
gallery_asset_picker
是一个用于在 Flutter 应用中从设备图库中选择图片和视频的插件。它提供了一个简洁的界面,允许用户从相册中选择多个图片或视频,并返回这些媒体文件的路径或其他相关信息。
安装
首先,你需要将 gallery_asset_picker
添加到你的 pubspec.yaml
文件中:
dependencies:
flutter:
sdk: flutter
gallery_asset_picker: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本使用
-
导入包:
在你的 Dart 文件中导入
gallery_asset_picker
:import 'package:gallery_asset_picker/gallery_asset_picker.dart';
-
选择图片或视频:
使用
GalleryAssetPicker.pickAssets
方法来打开图库选择器并选择图片或视频。你可以通过AssetType
来指定你想要选择的媒体类型(图片、视频或两者)。void pickAssets() async { final List<AssetEntity>? result = await GalleryAssetPicker.pickAssets( context: context, maxAssets: 5, // 最多选择5个文件 assetType: AssetType.image, // 选择图片 ); if (result != null) { for (var asset in result) { // 获取文件路径 String? filePath = await asset.file?.path; print('Selected file path: $filePath'); } } }
-
处理选择的资产:
选择完成后,
GalleryAssetPicker.pickAssets
会返回一个List<AssetEntity>
,你可以通过这些AssetEntity
对象来获取文件路径、缩略图等信息。String? filePath = await asset.file?.path; Uint8List? thumbnail = await asset.thumbData;
-
显示选择的图片或视频:
你可以使用
Image.file
或VideoPlayerController
来显示选择的图片或视频。Image.file(File(filePath));
对于视频,你可以使用
video_player
插件来播放:VideoPlayerController _controller = VideoPlayerController.file(File(filePath)); _controller.initialize().then((_) { setState(() {}); _controller.play(); });
高级配置
gallery_asset_picker
还提供了一些高级配置选项,例如:
maxAssets
: 设置最多可以选择多少个文件。assetType
: 设置选择文件的类型(图片、视频或两者)。themeColor
: 设置选择器的主题颜色。requestType
: 设置请求类型(图片、视频或两者)。
示例代码
以下是一个完整的示例代码,展示了如何使用 gallery_asset_picker
来选择并显示图片:
import 'package:flutter/material.dart';
import 'package:gallery_asset_picker/gallery_asset_picker.dart';
import 'dart:io';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> imagePaths = [];
void pickAssets() async {
final List<AssetEntity>? result = await GalleryAssetPicker.pickAssets(
context: context,
maxAssets: 5,
assetType: AssetType.image,
);
if (result != null) {
for (var asset in result) {
String? filePath = await asset.file?.path;
if (filePath != null) {
setState(() {
imagePaths.add(filePath);
});
}
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Gallery Asset Picker Example'),
),
body: Column(
children: [
ElevatedButton(
onPressed: pickAssets,
child: Text('Pick Images'),
),
Expanded(
child: ListView.builder(
itemCount: imagePaths.length,
itemBuilder: (context, index) {
return Image.file(File(imagePaths[index]));
},
),
),
],
),
);
}
}
void main() {
runApp(MaterialApp(
home: MyHomePage(),
));
}
注意事项
- 在 Android 上,你需要确保已经请求了读取外部存储的权限。
- 在 iOS 上,你需要在
Info.plist
文件中添加相册访问权限的描述。
权限处理
在 Android 中,你可能需要处理运行时权限:
import 'package:permission_handler/permission_handler.dart';
void requestPermissions() async {
if (await Permission.storage.request().isGranted) {
// 权限已授予
} else {
// 权限被拒绝
}
}
在 iOS 中,确保在 Info.plist
中添加以下内容:
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to pick images.</string>