@@ -24,8 +24,9 @@ Language: [English](README.md) | 中文
24
24
当前的界面设计基于的微信版本:** 8.x**
25
25
界面更新将在微信版本更新后随时进行跟进。
26
26
27
- ** 注意:** 如果你觉得你的自定义实现会在某些程度上帮助其他人实现他们的需求,你可以通过 PR 提交你的自定义实现。
28
- 更多信息请参考 [ 贡献自定义实现] ( example/lib/customs/CONTRIBUTING.md ) 。
27
+ ** 注意:** 如果你觉得你的自定义实现会在某些程度上帮助其他人实现他们的需求,
28
+ 你可以通过 PR 提交你的自定义实现。更多信息请参考
29
+ [ 贡献自定义实现] ( example/lib/customs/CONTRIBUTING.md ) 。
29
30
30
31
## 目录 🗂
31
32
@@ -48,10 +49,8 @@ Language: [English](README.md) | 中文
48
49
* [ 常见问题] ( #常见问题- )
49
50
* [ Execution failed for task ':photo_manager: compileDebugKotlin '] ( #execution-failed-for-task-photo_managercompiledebugkotlin )
50
51
* [ 如何获取资源的路径以进行上传或编辑等操作的整合?] ( #如何获取资源的路径以进行上传或编辑等操作的整合 )
51
- * [ 如何更改 'Recent' 或其他路径的名称或属性?] ( #如何更改-recent-或其他路径的名称或属性 )
52
52
* [ 从 ` File ` 或 ` Uint8List ` 创建 ` AssetEntity ` 的方法] ( #从-file-或-uint8list-创建-assetentity-的方法 )
53
53
* [ 控制台提示 'Failed to find GeneratedAppGlideModule'] ( #控制台提示-failed-to-find-generatedappglidemodule )
54
- * [ 禁用媒体位置权限] ( #禁用媒体位置权限 )
55
54
56
55
## 迁移指南 ♻️
57
56
@@ -87,8 +86,9 @@ Language: [English](README.md) | 中文
87
86
## 开始前的注意事项 ‼️
88
87
89
88
尽管该库提供了资源的选择,其仍然要求使用者构建自己的方法来处理显示、上传等操作。
90
- 如果你在使用该库的过程对某些方法或API有疑问,
91
- 请运行示例并查看 [ photo_manager] ( https://github.com/CaiJingLong/flutter_photo_manager ) 对相关方法的使用说明。
89
+ 如果你在使用该库的过程对某些方法或API有疑问,请运行示例并查看
90
+ [ photo_manager] ( https://github.com/CaiJingLong/flutter_photo_manager )
91
+ 对相关方法的使用说明。
92
92
93
93
## 准备工作 🍭
94
94
@@ -125,15 +125,17 @@ import 'package:wechat_assets_picker/wechat_assets_picker.dart';
125
125
126
126
### Android
127
127
128
- 依赖要求项目的安卓原生部分整合至 Android embedding v2,
129
- 更多信息请至 [ Upgrading pre 1.12 Android projects] ( https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects )
130
- 查看。
128
+ 需要声明的权限:` READ_EXTERNAL_STORAGE ` (已声明).
129
+ 可选声明的权限:` WRITE_EXTERNAL_STORAGE ` 、` ACCESS_MEDIA_LOCATION ` .
131
130
132
- 需要声明的权限:` INTERNET ` , ` READ_EXTERNAL_STORAGE ` , ` WRITE_EXTERNAL_STORAGE ` , ` ACCESS_MEDIA_LOCATION ` 。
133
- 如果你不需要 ` ACCESS_MEDIA_LOCATION ` 权限,请参考 [ 禁用媒体位置权限] ( #禁用媒体位置权限 ) 要进行移除。
131
+ 如果你的目标 SDK 版本大于 29,
132
+ 你必须声明在 ` AndroidManifest.xml ` 的 ` <application> ` 节点中
133
+ 声明 ` requestLegacyExternalStorage ` 。
134
+ 详情请参考示例。
134
135
135
- 如果你发现有一些与 ` Glide ` 有关的警告日志输出,那么主项目就需要实现 ` AppGlideModule ` 。
136
- 请查看 [ Generated API] ( https://muyangmin.github.io/glide-docs-cn/doc/generatedapi.html ) .
136
+ 如果你发现有一些与 ` Glide ` 有关的警告日志输出,
137
+ 那么主项目就需要实现 ` AppGlideModule ` 。详细信息请查看
138
+ [ Generated API] ( https://muyangmin.github.io/glide-docs-cn/doc/generatedapi.html ) .
137
139
138
140
### iOS
139
141
@@ -155,11 +157,13 @@ platform :ios, '9.0'
155
157
156
158
### macOS
157
159
158
- 目前 Flutter 桌面版仍然在开发阶段,所以请注意,任何与桌面版本有关的问题都不会受到技术支持。
160
+ 目前 Flutter 桌面版仍然在开发阶段,所以请注意,
161
+ 任何与桌面版本有关的问题都不会受到技术支持。
159
162
160
163
1 . 在 ` macos/Podfile ` 中指定最低构建版本至 ** 10.15** 。
161
164
162
- 2 . 使用 ** Xcode** 打开 ` macos/Runner.xcworkspace ` 。接着根据下面的截图将最低构建版本提升至 ** 10.15** 。
165
+ 2 . 使用 ** Xcode** 打开 ` macos/Runner.xcworkspace ` 。
166
+ 接着根据下面的截图将最低构建版本提升至 ** 10.15** 。
163
167
164
168
3 . ![ step 1] ( https://tva1.sinaimg.cn/large/007S8ZIlgy1ghw67v4yk4j30qy0b50u0.jpg )
165
169
@@ -217,7 +221,8 @@ final List<AssetEntity>? result = await AssetPicker.pickAssets(
217
221
218
222
### 使用自定义代理
219
223
220
- 你只能在使用 ` pickAssetsWithDelegate ` 方法时使用 ` keepScrollOffset ` 的功能。
224
+ 你只能在使用 ` pickAssetsWithDelegate ` 方法时
225
+ 使用 ` keepScrollOffset ` 的功能。
221
226
更多细节请查看示例内的 ` Keep scroll offset ` 方法。
222
227
223
228
想要了解更多关于自定义代理实现的内容,
@@ -226,15 +231,16 @@ final List<AssetEntity>? result = await AssetPicker.pickAssets(
226
231
#### 一般的调用选择情况
227
232
228
233
你可以在 ` example/lib/pages/multi_assets_page.dart ` 和
229
- ` example/lib/pages/single_assets_page.dart ` 找到 ` List<PickMethod> pickMethods ` ,
234
+ ` example/lib/pages/single_assets_page.dart `
235
+ 找到 ` List<PickMethod> pickMethods ` ,
230
236
它分别定义了多选和单选可用的选择模式。
231
237
在选择资源后,资源会暂存并展示在页面下方。
232
238
233
239
##### 多选资源
234
240
235
241
页面中的最大选择数是 ` 9 ` ,你可以按需修改。
236
242
237
- 某些模式只能在多选下使用,例如「WeChat Moment」(朋友圈) 模式。
243
+ 某些模式只能在多选下使用,例如「朋友圈」( WeChat Moment) 模式。
238
244
239
245
##### 单选资源
240
246
@@ -247,35 +253,41 @@ final List<AssetEntity>? result = await AssetPicker.pickAssets(
247
253
(与 ` photo_manager ` 完全无关)实现的选择器,
248
254
以及一个多 Tab 页切换的选择器。
249
255
如果你觉得你的实现有价值或能帮助到其他人,欢迎以 PR 的形式进行提交。
250
- 更多细节请阅读 [ 贡献自定义实现] [ example/lib/customs/CONTRIBUTING.md ]
256
+ 更多细节请阅读
257
+ [ 贡献自定义实现] [ example/lib/customs/CONTRIBUTING.md ] 。
251
258
252
259
### 展示选中的资源
253
260
254
- ` AssetEntityImageProvider ` 可以为 ** 图片 & 视频** 展示缩略图,以及展示 ** 图片的原图** 。
255
- 它的使用方法与常见的 ` ImageProvider ` 一致。
261
+ ` AssetEntityImage ` 和 ` AssetEntityImageProvider `
262
+ 可以为 ** 图片 & 视频** 展示缩略图,以及展示 ** 图片的原图** 。
263
+ 它的使用方法与常见的 ` Image ` 和 ` ImageProvider ` 一致。
256
264
257
265
``` dart
258
- Image(image: AssetEntityImageProvider(asset, isOriginal: false))
259
- ```
266
+ /// AssetEntityImage
267
+ AssetEntityImage(asset, isOriginal: false);
260
268
261
- 请查看示例以了解它如何进行展示。
269
+ /// AssetEntityImageProvider
270
+ Image(image: AssetEntityImageProvider(asset, isOriginal: false));
271
+ ```
262
272
263
273
### 注册资源变化回调
264
274
265
275
``` dart
266
- AssetPicker.registerObserve(); // 注册回调
267
- ```
276
+ / // 注册回调
277
+ AssetPicker.registerObserve();
268
278
269
- ``` dart
270
- AssetPicker.unregisterObserve(); // 取消注册回调
279
+ /// 取消注册回调
280
+ AssetPicker.unregisterObserve();
271
281
```
272
282
273
283
### 自定义类型或 UI
274
284
275
- ` AssetPickerBuilderDelegate ` 、` AssetPickerViewerBuilderDelegate ` 、` AssetPickerProvider ` 及
276
- ` AssetPickerViewerProvider ` 均已暴露且可重载。使用者可以使用自定义的泛型类型 ` <A: 资源, P: 路径> ` ,
277
- 配合继承与重载,实现对应抽象类和类中的方法。更多用法请查看示例中的 ` Custom ` 页面,该页面包含一个以
278
- ` <File, Directory> ` 为类型基础的选择器。
285
+ ` AssetPickerBuilderDelegate ` 、` AssetPickerViewerBuilderDelegate ` 、
286
+ ` AssetPickerProvider ` 及 ` AssetPickerViewerProvider ` 均已暴露且可重载。
287
+ 使用者可以使用自定义的泛型类型 ` <A: 资源, P: 路径> ` ,
288
+ 配合继承与重载,实现对应抽象类和类中的方法。
289
+ 更多用法请查看示例中的 ` Custom ` 页面,
290
+ 该页面包含一个以 ` <File, Directory> ` 为类型基础的选择器。
279
291
280
292
## 常见问题 ❔
281
293
@@ -292,7 +304,8 @@ AssetPicker.unregisterObserve(); // 取消注册回调
292
304
` File ` 对象可以通过 ` entity.file ` 或 ` entity.originFile ` 获得,
293
305
如果需要 ` Uint8List ` 则使用 ` entity.originBytes ` 。
294
306
295
- 如果再此之后你仍然需要路径,那么可以通过已获得的 ` File ` 对象获取: ` file.path ` 。
307
+ 如果再此之后你仍然需要路径,
308
+ 那么可以通过已获得的 ` File ` 对象获取:
296
309
297
310
``` dart
298
311
final File file = await entity.file; // 缩略图或编辑后的视频
@@ -303,7 +316,8 @@ final String originPath = originFile.path;
303
316
304
317
### 从 ` File ` 或 ` Uint8List ` 创建 ` AssetEntity ` 的方法
305
318
306
- 如果需要使用此库结合一些拍照需求,可通过以下方法将 ` File ` 或 ` Uint8List ` 转为 ` AssetEntity ` 。
319
+ 如果需要使用此库结合一些拍照需求,
320
+ 可通过以下方法将 ` File ` 或 ` Uint8List ` 转为 ` AssetEntity ` 。
307
321
308
322
``` dart
309
323
final File file = your_file; // 你的 File 对象
@@ -327,7 +341,7 @@ final AssetEntity imageEntity = await PhotoManager.editor.saveImage(
327
341
final List<String> result = await PhotoManager.editor.deleteWithIds([entity.id]);
328
342
```
329
343
330
- 参考文档: [ flutter_photo_manager#insert-new-item] ( https://github.com/CaiJingLong/flutter_photo_manager#insert-new-item )
344
+ 参考文档:[ flutter_photo_manager#insert-new-item] ( https://github.com/CaiJingLong/flutter_photo_manager#insert-new-item )
331
345
332
346
### 控制台提示 'Failed to find GeneratedAppGlideModule'
333
347
@@ -336,28 +350,17 @@ W/Glide (21133): Failed to find GeneratedAppGlideModule. You should include an
336
350
```
337
351
338
352
` Glide ` 通过注解来保证单例,防止单例或版本之间的冲突,
339
- 而因为 ` photo_manager ` 使用了 ` Glide ` 提供部分图片功能,所以使用它的项目必须实现自己的 ` AppGlideModule ` 。
353
+ 而因为 ` photo_manager ` 使用了 ` Glide ` 提供部分图片功能,
354
+ 所以使用它的项目必须实现自己的 ` AppGlideModule ` 。
340
355
请移步 [ Android] ( #android ) 部分了解如何实现。
341
356
342
- ### 禁用媒体位置权限
343
-
344
- Android 将默认包含 ` ACCESS_MEDIA_LOCATION ` 权限。
345
- 这个权限是在 Android Q 中引入的。
346
- 如果你的应用不需要这个权限,
347
- 你需要在你的应用中的 ` AndroidManifest.xml ` 中添加以下节点内容:
348
-
349
- ``` xml
350
- <uses-permission
351
- android : name =" android.permission.ACCESS_MEDIA_LOCATION"
352
- tools : node =" remove"
353
- />
354
- ```
355
-
356
357
## 致谢
357
358
358
359
> IntelliJ IDEA 的每个方面都旨在最大化开发者生产力。结合智能编码辅助与符合人体工程学的设计,让开发不仅高效,更成为一种享受。
359
360
360
- 感谢 [ JetBrains] ( https://www.jetbrains.com/?from=fluttercandies ) 为开源项目提供免费的
361
- [ IntelliJ IDEA] ( https://www.jetbrains.com/idea/?from=fluttercandies ) 等 IDE 的授权。
361
+ 感谢 [ JetBrains] ( https://www.jetbrains.com/?from=fluttercandies )
362
+ 为开源项目提供免费的
363
+ [ IntelliJ IDEA] ( https://www.jetbrains.com/idea/?from=fluttercandies )
364
+ 等 IDE 的授权。
362
365
363
366
[ <img src =" https://github.com/fluttercandies/flutter_wechat_assets_picker/raw/master/.github/jetbrains-variant.png " width =" 200 " />] ( https://www.jetbrains.com/?from=fluttercandies )
0 commit comments