Flutter多图选择插件multiple_images_picker的使用
Flutter多图选择插件multiple_images_picker的使用
简介
Flutter Multiple Image Picker
Flutter 插件,用于在iOS和Android上选择多张图片。
关键特性
- 选择多张图片
- 原生性能
- 按相册排序的照片
- 网格视图中的拍照选项
- 限制用户可以选取的最大图片数量
- 可定制的UI和本地化支持
- 缩略图支持
- 指定原始图片或缩略图的质量
- 读取图片元数据
致谢
本软件使用以下开源包:
- BSImagePicker - iOS
- FishBun - Android
相关插件
image_picker - 官方Flutter图片选择器插件
支持
欢迎提交PR以改进此插件。
许可证
MIT
使用示例
以下是multiple_images_picker
插件的使用示例代码:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:multiple_images_picker/multiple_images_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<Asset> images = <Asset>[];
String _error = '无错误检测';
[@override](/user/override)
void initState() {
super.initState();
}
Widget buildGridView() {
return GridView.count(
crossAxisCount: 3,
children: List.generate(images.length, (index) {
Asset asset = images[index];
return AssetThumb(
asset: asset,
width: 300,
height: 300,
);
}),
);
}
Future<void> loadAssets() async {
List<Asset> resultList = <Asset>[];
String error = '无错误检测';
try {
resultList = await MultipleImagesPicker.pickImages(
maxImages: 300, // 最大选择图片数量
enableCamera: true, // 启用相机
selectedAssets: images, // 已选图片
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), // iOS样式配置
materialOptions: MaterialOptions(
actionBarColor: "#abcdef", // 操作栏颜色
actionBarTitle: "示例应用", // 操作栏标题
allViewTitle: "所有照片", // 全部照片标题
useDetailsView: false, // 是否使用详细视图
selectCircleStrokeColor: "#000000", // 选择圆圈的颜色
),
);
} on Exception catch (e) {
error = e.toString();
}
// 如果小部件在异步平台消息飞行时从树中移除,则我们想要丢弃回复而不是调用setState来更新我们的不存在的外观。
if (!mounted) return;
setState(() {
images = resultList;
_error = error;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Column(
children: <Widget>[
Center(child: Text('错误: $_error')), // 显示错误信息
ElevatedButton( // 按钮点击加载图片
child: Text("选择图片"),
onPressed: loadAssets,
),
Expanded( // 扩展视图
child: buildGridView(), // 构建网格视图
)
],
),
),
);
}
}
说明
-
导入必要的库:
import 'package:flutter/material.dart'; import 'dart:async'; import 'package:multiple_images_picker/multiple_images_picker.dart';
-
定义主应用类:
void main() => runApp(MyApp());
-
初始化状态:
class _MyAppState extends State<MyApp> { List<Asset> images = <Asset>[]; // 存储选中的图片 String _error = '无错误检测'; // 错误信息 [@override](/user/override) void initState() { super.initState(); }
-
构建网格视图:
Widget buildGridView() { return GridView.count( crossAxisCount: 3, // 每行3列 children: List.generate(images.length, (index) { Asset asset = images[index]; return AssetThumb( asset: asset, width: 300, height: 300, ); }), ); }
-
加载图片:
Future<void> loadAssets() async { List<Asset> resultList = <Asset>[]; String error = '无错误检测'; try { resultList = await MultipleImagesPicker.pickImages( maxImages: 300, // 最大选择图片数量 enableCamera: true, // 启用相机 selectedAssets: images, // 已选图片 cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), // iOS样式配置 materialOptions: MaterialOptions( actionBarColor: "#abcdef", // 操作栏颜色 actionBarTitle: "示例应用", // 操作栏标题 allViewTitle: "所有照片", // 全部照片标题 useDetailsView: false, // 是否使用详细视图 selectCircleStrokeColor: "#000000", // 选择圆圈的颜色 ), ); } on Exception catch (e) { error = e.toString(); } if (!mounted) return; setState(() { images = resultList; _error = error; }); }
-
构建UI:
[@override](/user/override) Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('插件示例应用'), ), body: Column( children: <Widget>[ Center(child: Text('错误: $_error')), // 显示错误信息 ElevatedButton( child: Text("选择图片"), onPressed: loadAssets, ), Expanded( child: buildGridView(), ) ], ), ), ); }
更多关于Flutter多图选择插件multiple_images_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter多图选择插件multiple_images_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用multiple_images_picker
插件来选择多张图片的示例代码。
首先,你需要在你的pubspec.yaml
文件中添加multiple_images_picker
依赖:
dependencies:
flutter:
sdk: flutter
multiple_images_picker: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter项目中创建一个页面来选择多张图片。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:multiple_images_picker/multiple_images_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Multiple Images Picker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Asset> images = [];
bool isLoading = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Multiple Images Picker Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
Button(
text: 'Pick Images',
onPressed: () => _pickImages(context),
),
SizedBox(height: 16.0),
Expanded(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
itemCount: images.length,
itemBuilder: (context, index) {
Asset asset = images[index];
return Image.file(
File(asset.path),
fit: BoxFit.cover,
width: 100,
height: 100,
);
},
),
),
],
),
),
);
}
Future<void> _pickImages(BuildContext context) async {
setState(() {
isLoading = true;
});
List<Asset> resultList = await MultipleImagePicker.pickImages(
maxImages: 30,
enableCamera: true,
selectedAssets: images.map((asset) => Asset(path: asset.path, id: asset.id)).toList(),
cupertinoOptions: CupertinoPickerOptions(
gridCount: 9,
),
materialOptions: MaterialPickerOptions(
actionBarTitle: "Choose",
actionBarColor: "#007bff",
actionBarTextColor: "#ffffff",
allViewTitle: "All Photos",
useDetailsView: false,
selectCircleStrokeColor: "#000000",
),
);
if (resultList.isNotEmpty) {
setState(() {
images = resultList;
isLoading = false;
});
} else if (resultList.isEmpty) {
setState(() {
isLoading = false;
});
}
}
}
class Button extends StatelessWidget {
final String text;
final VoidCallback onPressed;
Button({this.text, this.onPressed});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Text(text),
style: ElevatedButton.styleFrom(
primary: Colors.blue,
),
);
}
}
说明:
- 依赖添加:在
pubspec.yaml
文件中添加了multiple_images_picker
依赖。 - UI布局:创建了一个简单的UI,包括一个按钮用于选择图片,以及一个
GridView
用于显示选中的图片。 - 选择图片:
_pickImages
方法使用MultipleImagePicker.pickImages
来让用户选择图片,并处理结果。 - 显示图片:选中的图片会显示在
GridView
中。
你可以根据实际需求进一步调整这个示例代码。希望这能帮助你更好地使用multiple_images_picker
插件!