@@ -19,7 +19,8 @@ Language: [English](README.md) | 中文
19
19
需要拍照及录制视频,请查看示例的详细用法,
20
20
并前往 [ wechat_camera_picker] ( https://pub.flutter-io.cn/packages/wechat_camera_picker ) 。
21
21
22
- 所有的界面细节基于 ** 微信 8.x 版本** ,将在微信版本更新后随时进行跟进。
22
+ 当前的界面设计基于的微信版本:** 8.x**
23
+ 界面更新将在微信版本更新后随时进行跟进。
23
24
24
25
** 注意:** 如果你觉得你的自定义实现会在某些程度上帮助其他人实现他们的需求,你可以通过 PR 提交你的自定义实现。
25
26
更多信息请参考 [ 贡献自定义实现] ( example/lib/customs/CONTRIBUTING.md ) 。
@@ -60,7 +61,7 @@ Language: [English](README.md) | 中文
60
61
- 💚 99% 的微信风格
61
62
- ⚡️ 根据参数可调的性能优化
62
63
- 📷 图片资源支持
63
- - 🔬 HEIC/ HEIF 格式图片支持
64
+ - 🔬 HEIF 格式图片支持
64
65
- 🎥 视频资源支持
65
66
- 🎶 音频资源支持
66
67
- 1️⃣ 单资源模式
@@ -76,7 +77,7 @@ Language: [English](README.md) | 中文
76
77
## 截图 📸
77
78
78
79
| ![ 1] ( https://pic.alexv525.com/2021-07-05-picker_1.jpg ) | ![ 2] ( https://pic.alexv525.com/2021-07-05-picker_2.jpg ) | ![ 3] ( https://pic.alexv525.com/2021-07-05-picker_3.jpg ) |
79
- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
80
+ | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
80
81
| ![ 4] ( https://pic.alexv525.com/2021-07-05-picker_4.jpg ) | ![ 5] ( https://pic.alexv525.com/2021-07-05-picker_5.jpg ) | ![ 6] ( https://pic.alexv525.com/2021-07-05-picker_6.jpg ) |
81
82
| ![ 7] ( https://pic.alexv525.com/2021-07-06-picker_7.jpg ) | ![ 8] ( https://pic.alexv525.com/2021-07-05-picker_8.jpg ) | ![ 9] ( https://pic.alexv525.com/2021-07-05-picker_9-1.jpg ) |
82
83
| ![ 10] ( https://pic.alexv525.com/2021-07-05-picker_10.png ) | ![ 10] ( https://pic.alexv525.com/2021-07-05-picker_11.png ) | ![ 12] ( https://pic.alexv525.com/2021-07-05-picker_12.png ) |
@@ -97,8 +98,8 @@ Language: [English](README.md) | 中文
97
98
| 6.2.0 | ✅ | ✅ | ✅ |
98
99
| 5.0.0+ | ✅ | N/A | N/A |
99
100
100
- 如果在 ` flutter pub get ` 时遇到了失败问题,请使用 ` dependency_overrides ` 解决。
101
- 参考 [ 版本获取冲突 ] ( #xxx-版本获取冲突-例如-dartx ) 。
101
+ 如果在 ` flutter pub get ` 时遇到了 ` resolve conflict ` 失败问题,
102
+ 请使用 ` dependency_overrides ` 解决 。
102
103
103
104
### Flutter
104
105
@@ -167,30 +168,30 @@ platform :ios, '9.0'
167
168
168
169
## 使用方法 📖
169
170
170
- | 参数名 | 类型 | 描述 | 默认值 |
171
- | ------------------------- | ---------------------- | ------------------------------------------------ | ------------------- |
172
- | selectedAssets | ` List<AssetEntity>? ` | 已选的资源。确保不重复选择。如果你允许重复选择,请将其置空。 | ` null ` |
173
- | maxAssets | ` int ` | 最多选择的图片数量 | 9 |
174
- | pageSize | ` int ` | 分页加载时每页加载的资源数量。** 必须为网格数的倍数。** 设置为` null ` 可以取消分页。 | 320 (80 * 4) |
175
- | gridThumbSize | ` int ` | 预览网格的缩略图大小 | 200 |
176
- | pathThumbSize | ` int ` | 路径选择器的缩略图大小 | 80 |
177
- | previewThumbSize | ` List<int>? ` | 预览时图片的缩略图大小 | ` null ` |
178
- | gridCount | ` int ` | 选择器网格数量 | 4 |
179
- | requestType | ` RequestType ` | 选择器选择资源的类型 | ` RequestType.image ` |
180
- | specialPickerType | ` SpecialPickerType? ` | 提供一些特殊的选择器类型以整合非常规的选择行为 | ` null ` |
181
- | themeColor | ` Color? ` | 选择器的主题色 | ` Color(0xff00bc56) ` |
182
- | pickerTheme | ` ThemeData? ` | 选择器的主题提供,包括查看器 | ` null ` |
183
- | sortPathDelegate | ` SortPathDeleage? ` | 资源路径的排序实现,可自定义路径排序方法 | ` CommonSortPathDelegate ` |
184
- | textDelegate | ` DefaultAssetsPickerTextDelegate? ` | 选择器的文本代理构建,用于自定义文本 | ` DefaultAssetsPickerTextDelegate() ` |
185
- | filterOptions | ` FilterOptionGroup? ` | 允许用户自定义资源过滤条件 | ` null ` |
186
- | specialItemBuilder | ` WidgetBuilder? ` | 自定义item的构造方法 | ` null ` |
187
- | specialItemPosition | ` SpecialItemPosition ` | 允许用户在选择器中添加一个自定义item,并指定位置。 | ` SpecialPosition.none ` |
188
- | loadingIndicatorBuilder | ` IndicatorBuilder? ` | 加载器的实现 | ` null ` |
189
- | allowSpecialItemWhenEmpty | ` bool ` | 在资源为空时是否允许显示自定义item | ` false ` |
190
- | selectPredicate | ` AssetSelectPredicate ` | 判断资源可否被选择 | ` null ` |
191
- | shouldRevertGrid | ` bool? ` | 判断资源网格是否需要倒序排列 | ` null ` |
192
- | routeCurve | ` Curve ` | 选择构造路由动画的曲线 | ` Curves.easeIn ` |
193
- | routeDuration | ` Duration ` | 选择构造路由动画的时间 | ` const Duration(milliseconds: 500) ` |
171
+ | 参数名 | 类型 | 描述 | 默认值 |
172
+ | --------------------------- | ------------------------------------ | ------------------------------------------------| ------------------------------------- |
173
+ | selectedAssets | ` List<AssetEntity>? ` | 已选的资源。确保不重复选择。如果你允许重复选择,请将其置空。 | ` null ` |
174
+ | maxAssets | ` int ` | 最多选择的图片数量 | 9 |
175
+ | pageSize | ` int ` | 分页加载时每页加载的资源数量。** 必须为网格数的倍数。** 设置为` null ` 可以取消分页。 | 320 (80 * 4) |
176
+ | gridThumbSize | ` int ` | 预览网格的缩略图大小 | 200 |
177
+ | pathThumbSize | ` int ` | 路径选择器的缩略图大小 | 80 |
178
+ | previewThumbSize | ` List<int>? ` | 预览时图片的缩略图大小 | ` null ` |
179
+ | gridCount | ` int ` | 选择器网格数量 | 4 |
180
+ | requestType | ` RequestType ` | 选择器选择资源的类型 | ` RequestType.image ` |
181
+ | specialPickerType | ` SpecialPickerType? ` | 提供一些特殊的选择器类型以整合非常规的选择行为 | ` null ` |
182
+ | themeColor | ` Color? ` | 选择器的主题色 | ` Color(0xff00bc56) ` |
183
+ | pickerTheme | ` ThemeData? ` | 选择器的主题提供,包括查看器 | ` null ` |
184
+ | sortPathDelegate | ` SortPathDeleage? ` | 资源路径的排序实现,可自定义路径排序方法 | ` CommonSortPathDelegate ` |
185
+ | textDelegate | ` DefaultAssetsPickerTextDelegate? ` | 选择器的文本代理构建,用于自定义文本 | ` DefaultAssetsPickerTextDelegate() ` |
186
+ | filterOptions | ` FilterOptionGroup? ` | 允许用户自定义资源过滤条件 | ` null ` |
187
+ | specialItemBuilder | ` WidgetBuilder? ` | 自定义item的构造方法 | ` null ` |
188
+ | specialItemPosition | ` SpecialItemPosition ` | 允许用户在选择器中添加一个自定义item,并指定位置。 | ` SpecialPosition.none ` |
189
+ | loadingIndicatorBuilder | ` IndicatorBuilder? ` | 加载器的实现 | ` null ` |
190
+ | allowSpecialItemWhenEmpty | ` bool ` | 在资源为空时是否允许显示自定义item | ` false ` |
191
+ | selectPredicate | ` AssetSelectPredicate ` | 判断资源可否被选择 | ` null ` |
192
+ | shouldRevertGrid | ` bool? ` | 判断资源网格是否需要倒序排列 | ` null ` |
193
+ | routeCurve | ` Curve ` | 选择构造路由动画的曲线 | ` Curves.easeIn ` |
194
+ | routeDuration | ` Duration ` | 选择构造路由动画的时间 | ` const Duration(milliseconds: 500) ` |
194
195
195
196
### 简单的使用方法
196
197
@@ -200,19 +201,12 @@ final List<AssetEntity> assets = await AssetPicker.pickAssets(context);
200
201
201
202
### 使用自定义代理
202
203
203
- ``` dart
204
- final YourAssetPickerProvider provider = yourProvider;
205
- final CustomAssetPickerBuilderDelegate builder = yourBuilder(provider);
206
- final List<YourAssetEntity>? result = await AssetPicker.pickAssetsWithDelegate(
207
- context,
208
- provider: provider,
209
- delegate: builder,
210
- );
211
- ```
212
-
213
204
你只能在使用 ` pickAssetsWithDelegate ` 方法时使用 ` keepScrollOffset ` 的功能。
214
205
更多细节请查看示例内的 ` Keep scroll offset ` 方法。
215
206
207
+ 想要了解更多关于自定义代理实现的内容,
208
+ 查阅 [ ` example/lib/customs ` ] ( example/lib/customs ) 。
209
+
216
210
### 更详细的使用方法
217
211
218
212
我们已将常用的调用方法封装在 [ example] ( example ) 中。
@@ -237,8 +231,9 @@ final List<YourAssetEntity>? result = await AssetPicker.pickAssetsWithDelegate(
237
231
#### 自定义选择器
238
232
239
233
你可以在「Custom」页面尝试自定义的选择器。
240
- 目前我们只提供了一个基于 ` Directory ` 和 ` File `
241
- (与 ` photo_manager ` 完全无关)实现的选择器。
234
+ 目前我们提供了一个基于 ` Directory ` 和 ` File `
235
+ (与 ` photo_manager ` 完全无关)实现的选择器,
236
+ 以及一个多 Tab 页切换的选择器。
242
237
如果你觉得你的实现有价值或能帮助到其他人,欢迎以 PR 的形式进行提交。
243
238
更多细节请阅读 [ 贡献自定义实现] [ example/lib/customs/CONTRIBUTING.md ]
244
239
@@ -336,11 +331,21 @@ class CustomSortPathDelegate extends CommonSortPathDelegate {
336
331
337
332
``` dart
338
333
final File file = your_file; // 你的 File 对象
339
- final Uint8List byteData = await file.readAsBytes(); // 转为 Uint8List
340
- final AssetEntity imageEntity = await PhotoManager.editor.saveImage(byteData); // 存入手机并生成 AssetEntity
334
+ final String path = file.path;
335
+ final AssetEntity fileEntity = await PhotoManager.editor.saveImageWithPath(
336
+ path,
337
+ title: basename(path),
338
+ ); // 存入手机并生成 AssetEntity
339
+
340
+ final Uint8List data = your_data; // 你的 Uint8List 对象
341
+ final AssetEntity imageEntity = await PhotoManager.editor.saveImage(
342
+ file.path,
343
+ title: '带有后缀的名称.jpg',
344
+ ); // 存入手机并生成 AssetEntity
341
345
```
342
346
343
- 如果不想保留文件,可以在操作完成(上传完或业务处理完)后进行删除:
347
+ ** 注意:如果不想保留文件,请尽量用 ` File ` 承载中间操作,**
348
+ 否则在调用 ` AssetEntity ` 的删除时,某些系统下会触发系统弹窗事件:
344
349
345
350
``` dart
346
351
final List<String> result = await PhotoManager.editor.deleteWithIds([entity.id]);
0 commit comments