Flutter图片选择插件gallery_picker的使用
Flutter图片选择插件gallery_picker的使用
gallery_picker简介
gallery_picker
是一个Flutter包,它允许您从相册中选择媒体文件,并且提供了现代化的工具和视图来管理和浏览您的相册。
主要特性
- [✔] 现代化设计
- [✔] 详细的文档
- [✔] 单个或多个媒体文件的选择
- [✔] 底部弹出式布局(BottomSheet)
- [✔] 自动本地化最近的选项卡
- [✔] 获取手机上的所有媒体文件
- [✔] 高度可定制的设计(目标页面、英雄目标页面等)
- [✔] 监听器功能以监听相册选择中的文件变化
- [✔] 缩略图小部件用于显示媒体文件
- [✔] 媒体提供者小部件用于查看视频/图像文件
- [✔] GalleryPickerBuilder流构建器用于更新设计
- [✔] 提供了即用型的小部件
- [✔] 内置权限请求处理
- [✔] 支持null-safety
示例代码
下面是一个完整的示例代码,演示如何使用 gallery_picker
插件进行单个或多个媒体文件的选择。
import 'package:flutter/material.dart';
import 'package:gallery_picker/gallery_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
brightness: Brightness.light,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
),
themeMode: ThemeMode.system,
home: MyHomePage(title: "Gallery Picker"),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<MediaFile> selectedMedias = [];
Future<void> pickMedia() async {
List<MediaFile>? media = await GalleryPicker.pickMedia(
context: context,
initSelectedMedia: selectedMedias,
extraRecentMedia: selectedMedias,
startWithRecent: true,
);
if (media != null) {
setState(() {
selectedMedias += media;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Spacer(),
const Text('These are your selected medias'),
const Divider(),
Expanded(
flex: 5,
child: Stack(children: [
if (selectedMedias.isNotEmpty)
PageView.builder(
itemCount: selectedMedias.length,
itemBuilder: (context, index) {
return Center(
child: MediaProvider(
media: selectedMedias[index],
),
);
},
),
if (selectedMedias.isNotEmpty)
Align(
alignment: Alignment.centerRight,
child: TextButton(
onPressed: () {},
child: const Icon(Icons.chevron_right, size: 100, color: Colors.red),
),
),
if (selectedMedias.isNotEmpty)
Align(
alignment: Alignment.centerLeft,
child: TextButton(
onPressed: () {},
child: const Icon(Icons.chevron_left, size: 100, color: Colors.red),
),
),
]),
),
SizedBox(
height: 65,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: selectedMedias.length,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: TextButton(
onPressed: () {},
child: Container(
width: 65,
height: 50,
decoration: BoxDecoration(border: Border.all(width: 2)),
child: ThumbnailMedia(media: selectedMedias[index]),
),
),
);
},
),
),
const Spacer(flex: 2),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: pickMedia,
tooltip: 'Pick Media',
child: const Icon(Icons.add),
),
);
}
}
使用步骤
1. 添加依赖
在 pubspec.yaml
文件中添加 gallery_picker
依赖:
dependencies:
flutter:
sdk: flutter
gallery_picker: ^最新版本号
2. 配置项目
根据平台不同,需要配置一些权限和设置。
Android
- 更新
build.gradle
文件中的 Kotlin 版本和 Gradle 插件版本。 - 在
AndroidManifest.xml
中添加权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- For SDK 33 and above -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
iOS
- 在
Info.plist
文件中添加必要的权限描述:
<key>NSPhotoLibraryUsageDescription</key>
<string>Privacy - Photo Library Usage Description</string>
<key>NSMotionUsageDescription</key>
<string>Motion usage description</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>NSPhotoLibraryAddUsageDescription</string>
3. 使用插件
通过调用 GalleryPicker.pickMedia
方法可以选择单个或多个媒体文件。还可以使用其他高级功能如监听文件选择变化、自定义目的地页面等。
以上就是 gallery_picker
的基本使用方法和完整示例代码。希望对您有所帮助!如果有任何问题,请随时提问。
更多关于Flutter图片选择插件gallery_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片选择插件gallery_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用gallery_picker
插件来选择图片的示例代码。这个插件允许用户从设备的图库中选择图片。
首先,你需要在你的pubspec.yaml
文件中添加gallery_picker
依赖:
dependencies:
flutter:
sdk: flutter
gallery_picker: ^latest_version # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中实现图片选择功能。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:gallery_picker/gallery_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Gallery Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: GalleryPickerDemo(),
);
}
}
class GalleryPickerDemo extends StatefulWidget {
@override
_GalleryPickerDemoState createState() => _GalleryPickerDemoState();
}
class _GalleryPickerDemoState extends State<GalleryPickerDemo> {
List<GalleryFile> _selectedImages = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Gallery Picker Demo'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
final result = await GalleryPicker.pick(
context: context,
limit: 5, // 最大选择数量
selectMode: SelectMode.multi, // 多选模式
);
if (result != null && result.isNotEmpty) {
setState(() {
_selectedImages = result;
});
}
},
child: Text('选择图片'),
),
SizedBox(height: 20),
Expanded(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4,
mainAxisSpacing: 4,
),
itemCount: _selectedImages.length,
itemBuilder: (context, index) {
final image = _selectedImages[index];
return Image.file(
File(image.path),
fit: BoxFit.cover,
);
},
),
),
],
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,它包含一个按钮和一个网格视图。点击按钮会打开图库选择器,允许用户选择图片。选中的图片会显示在下方的网格视图中。
注意几个关键点:
GalleryPicker.pick
方法用于打开图库选择器。你可以传递一些参数,如limit
(最大选择数量)和selectMode
(选择模式,可以是单选或多选)。result
是一个List<GalleryFile>
类型的对象,包含了用户选中的图片文件。- 使用
File(image.path)
来创建Image.file
小部件,以显示选中的图片。
确保你已经为应用添加了适当的权限,以便访问设备的图库。在Android上,你需要在AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在iOS上,通常不需要额外的配置,因为Flutter和iOS的权限管理系统会自动处理。
这个示例代码应该可以帮助你开始在Flutter项目中使用gallery_picker
插件来选择图片。