Flutter资源选择插件fh_assets_picker的使用
Flutter资源选择插件fh_assets_picker的使用
简介
fh_assets_picker
是一个基于 Instagram 挑选器界面的资源选择插件。它利用了强大的 flutter_wechat_assets_picker
和 fh_assets_picker
包来处理资源选择,并且使用了一个自定义版本的 image_crop
来进行裁剪。
特性
- 🚀 支持 Instagram 布局
- 滚动行为、动画
- 预览、选择、取消选择操作逻辑
- ✅ 支持图像和视频(不支持视频处理)
- ✅ 可定制主题和语言
- ✅ 支持多资源选择(带最大限制)
- ✅ 单资源选择模式
- ✅ 选择后的状态恢复
- ✅ 可选择裁剪比例(默认为 1:1 和 4:5)
- ✅ 一次裁剪所有图像资源并接收进度流
- ✅ 在资源列表中添加自定义项
- ✅ 添加自定义动作按钮
使用
安装
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
fh_assets_picker: ^x.y.z
确保遵循安装指南以正确设置该包。
示例代码
以下是一个简单的示例代码,展示了如何使用 fh_assets_picker
插件来选择资源。
import 'package:flutter/material.dart';
import 'package:fh_assets_picker/fh_assets_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'FH Assets Picker Demo',
theme: ThemeData(
primarySwatch: Colors.deepPurple,
),
home: PickersScreen(),
);
}
}
class PickersScreen extends StatelessWidget {
Future<List<AssetEntity>> callPicker() async {
final List<AssetEntity>? pickedAssets = await FHAssetsPicker.pickAssets(
context,
pickerConfig: FHAssetsPickerConfig(
title: '选择资源',
),
maxAssets: 10,
onCompleted: (Stream<FHAssetsExportDetails> stream) {
// 处理导出流结果
// 可以使用 StreamBuilder 来显示结果
// 或者使用 stream.listen 来手动处理数据
},
);
return pickedAssets ?? [];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('FH 资源选择器'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
final pickedAssets = await callPicker();
print('Picked Assets: $pickedAssets');
},
child: Text('选择资源'),
),
),
);
}
}
自定义配置
本地化
请参考 flutter_wechat_assets_picker
的文档来了解如何进行本地化设置。
主题定制
可以使用主题来定制大多数组件的外观。
// 设置选择器的主题颜色
final theme = FHAssetsPicker.themeData(Theme.of(context).primaryColor);
FHAssetsPicker.pickAssets(
context,
pickerConfig: FHAssetsPickerConfig(
pickerTheme: theme.copyWith(
canvasColor: Colors.black, // 背景颜色
splashColor: Colors.grey, // 点击时的溅起颜色
colorScheme: theme.colorScheme.copyWith(
background: Colors.black87, // 列表背景颜色
),
appBarTheme: theme.appBarTheme.copyWith(
backgroundColor: Colors.black, // 应用栏背景颜色
titleTextStyle: Theme.of(context)
.appBarTheme
.titleTextStyle
?.copyWith(color: Colors.white), // 更改应用栏标题文本样式
),
// 自定义确认按钮样式
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
foregroundColor: Colors.blue,
disabledForegroundColor: Colors.red,
),
),
),
),
onCompleted: (_) {},
);
裁剪定制
可以通过设置可选的裁剪比例来定制裁剪功能。
FHAssetsPicker.pickAssets(
context,
pickerConfig: FHAssetsPickerConfig(
cropDelegate: FHAssetCropDelegate(
// 设置裁剪时使用的首选尺寸
preferredSize: 1080,
cropRatios: [
// 设置可选的裁剪比例
// 默认值为 [1/1, 4/5],如 Instagram。
// 如果只想禁用裁剪,可以只设置一个参数,在这种情况下,裁剪按钮将不会显示。
// 如果裁剪比例不同于默认值,则裁剪按钮将显示选定的比例值(例如:1:1)而不是展开箭头。
],
),
),
onCompleted: (_) {},
);
更多关于Flutter资源选择插件fh_assets_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter资源选择插件fh_assets_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter资源选择插件fh_assets_picker
的代码示例。这个插件允许用户从设备中选择图片或视频资源。
首先,你需要在pubspec.yaml
文件中添加该插件的依赖:
dependencies:
flutter:
sdk: flutter
fh_assets_picker: ^latest_version # 请替换为最新的版本号
然后,运行flutter pub get
来获取依赖。
接下来,你可以在你的Flutter应用中使用fh_assets_picker
。下面是一个简单的示例,展示如何打开资源选择器,并处理选中的资源。
import 'package:flutter/material.dart';
import 'package:fh_assets_picker/fh_assets_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<AssetEntity> _assets = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('fh_assets_picker Demo'),
),
body: Column(
children: <Widget>[
Expanded(
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
itemCount: _assets.length,
itemBuilder: (context, index) {
AssetEntity asset = _assets[index];
return Image.file(
File(asset.path),
fit: BoxFit.cover,
);
},
),
),
ElevatedButton(
onPressed: () async {
// 打开资源选择器
List<AssetEntity> result = await AssetPicker.pickAssets(
context,
requestType: RequestType.image, // 你可以选择image, video, or all
maxAssets: 9,
pickType: PickType.single, // 或者PickType.multi
);
// 更新状态
setState(() {
_assets = result;
});
},
child: Text('选择资源'),
),
],
),
);
}
}
在这个示例中:
- 我们创建了一个简单的Flutter应用,其中包含一个
GridView
来显示选中的资源。 - 使用
fh_assets_picker
的AssetPicker.pickAssets
方法来打开资源选择器。 - 将选中的资源保存在
_assets
列表中,并在GridView
中显示它们。
注意:
RequestType.image
可以选择图片资源,你可以将其更改为RequestType.video
或RequestType.all
来选择视频或所有类型的资源。PickType.single
允许用户选择单个资源,PickType.multi
允许用户选择多个资源。
确保你已经添加了必要的权限到你的AndroidManifest.xml
和Info.plist
文件中,以便应用可以访问设备的存储。