Skip to content

Commit b702fd6

Browse files
authored
✨ Integrate PermissionRequestOption for callers (#517)
1 parent 540f678 commit b702fd6

File tree

11 files changed

+124
-17
lines changed

11 files changed

+124
-17
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ that can be found in the LICENSE file. -->
66

77
See the [Migration Guide](guides/migration_guide.md) for the details of breaking changes between versions.
88

9+
## 9.0.0-dev.1
10+
11+
### Breaking changes
12+
13+
- Integrate `PermissionRequestOption` for callers.
14+
915
## 8.9.0-dev.1
1016

1117
### Breaking changes

example/android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ apply plugin: 'kotlin-kapt'
2727
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
2828

2929
android {
30-
compileSdkVersion 33
30+
compileSdkVersion 34
3131

3232
sourceSets {
3333
main.java.srcDirs += 'src/main/kotlin'
@@ -40,7 +40,7 @@ android {
4040
defaultConfig {
4141
applicationId "com.fluttercandies.wechatAssetsPickerExample"
4242
minSdkVersion 21
43-
targetSdkVersion 33
43+
targetSdkVersion 34
4444
versionCode flutterVersionCode.toInteger()
4545
versionName flutterVersionName
4646
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

example/lib/customs/pickers/insta_asset_picker.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,14 @@ class _InstaAssetPickerState extends State<InstaAssetPicker> {
5959
}
6060

6161
Future<void> callPicker(BuildContext context) async {
62-
final PermissionState ps = await AssetPicker.permissionCheck();
63-
62+
final PermissionState ps = await AssetPicker.permissionCheck(
63+
requestOption: PermissionRequestOption(
64+
androidPermission: AndroidPermission(
65+
type: provider.requestType,
66+
mediaLocation: false,
67+
),
68+
),
69+
);
6470
final InstaAssetPickerBuilder builder = InstaAssetPickerBuilder(
6571
provider: provider,
6672
initialPermission: ps,

example/lib/customs/pickers/multi_tabs_assets_picker.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,14 @@ class _MultiTabAssetPickerState extends State<MultiTabAssetPicker> {
3030
bool isDisplayingDetail = true;
3131

3232
Future<void> callPicker(BuildContext context) async {
33-
final PermissionState ps = await AssetPicker.permissionCheck();
33+
final PermissionState ps = await AssetPicker.permissionCheck(
34+
requestOption: const PermissionRequestOption(
35+
androidPermission: AndroidPermission(
36+
type: RequestType.all,
37+
mediaLocation: false,
38+
),
39+
),
40+
);
3441

3542
final DefaultAssetPickerProvider provider = DefaultAssetPickerProvider(
3643
selectedAssets: entities,

example/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: wechat_assets_picker_demo
22
description: The demo project for the wechat_assets_picker package.
3-
version: 8.8.0+47
3+
version: 9.0.0+48
44
publish_to: none
55

66
environment:

guides/migration_guide.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ This document gathered all breaking changes and migrations requirement between m
88

99
## Major versions
1010

11+
- [9.0.0](#900)
1112
- [8.6.0](#860)
1213
- [8.3.0](#830)
1314
- [8.2.0](#820)
@@ -16,6 +17,65 @@ This document gathered all breaking changes and migrations requirement between m
1617
- [6.0.0](#600)
1718
- [5.0.0](#500)
1819

20+
## 9.0.0
21+
22+
### Summary
23+
24+
`PermissionRequestOption` has been added to
25+
`AssetPickerDelegate.permissionCheck` and
26+
`AssetPickerDelegate.pickAssetsWithDelegate` as an argument.
27+
Classes that extend `AssetPickerDelegate` and override these methods must migrate,
28+
Delegates that use `AssetPicker.permissionCheck`
29+
should choose whether to pass the request option.
30+
31+
### Details
32+
33+
Before:
34+
35+
1. ```dart
36+
AssetPicker.permissionCheck();
37+
```
38+
39+
2. ```dart
40+
Future<PermissionState> permissionCheck();
41+
```
42+
43+
3. ```dart
44+
Future<List<Asset>?> pickAssetsWithDelegate<Asset, Path,
45+
PickerProvider extends AssetPickerProvider<Asset, Path>>(
46+
BuildContext context, {
47+
required AssetPickerBuilderDelegate<Asset, Path> delegate,
48+
Key? key,
49+
bool useRootNavigator = true,
50+
AssetPickerPageRouteBuilder<List<Asset>>? pageRouteBuilder,
51+
})
52+
```
53+
54+
After:
55+
56+
1. ```dart
57+
AssetPicker.permissionCheck(requestOption: ...);
58+
```
59+
60+
2. ```dart
61+
Future<PermissionState> permissionCheck({
62+
PermissionRequestOption requestOption = const PermissionRequestOption,
63+
});
64+
```
65+
66+
3. ```dart
67+
Future<List<Asset>?> pickAssetsWithDelegate<Asset, Path,
68+
PickerProvider extends AssetPickerProvider<Asset, Path>>(
69+
BuildContext context, {
70+
required AssetPickerBuilderDelegate<Asset, Path> delegate,
71+
PermissionRequestOption requestOption =
72+
const PermissionRequestOption,
73+
Key? key,
74+
bool useRootNavigator = true,
75+
AssetPickerPageRouteBuilder<List<Asset>>? pageRouteBuilder,
76+
})
77+
```
78+
1979
## 8.6.0
2080

2181
### Summary

lib/src/delegates/asset_picker_delegate.dart

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ class AssetPickerDelegate {
2929
/// See also:
3030
/// * [PermissionState] which defined all states of required permissions.
3131
/// {@endtemplate}
32-
Future<PermissionState> permissionCheck() async {
33-
final PermissionState ps = await PhotoManager.requestPermissionExtend();
32+
Future<PermissionState> permissionCheck({
33+
PermissionRequestOption requestOption = const PermissionRequestOption(),
34+
}) async {
35+
final PermissionState ps = await PhotoManager.requestPermissionExtend(
36+
requestOption: requestOption,
37+
);
3438
if (ps != PermissionState.authorized && ps != PermissionState.limited) {
3539
throw StateError('Permission state error with $ps.');
3640
}
@@ -64,7 +68,14 @@ class AssetPickerDelegate {
6468
bool useRootNavigator = true,
6569
AssetPickerPageRouteBuilder<List<AssetEntity>>? pageRouteBuilder,
6670
}) async {
67-
final PermissionState ps = await permissionCheck();
71+
final PermissionState ps = await permissionCheck(
72+
requestOption: PermissionRequestOption(
73+
androidPermission: AndroidPermission(
74+
type: pickerConfig.requestType,
75+
mediaLocation: false,
76+
),
77+
),
78+
);
6879
final AssetPickerPageRoute<List<AssetEntity>> route =
6980
pageRouteBuilder?.call(const SizedBox.shrink()) ??
7081
AssetPickerPageRoute<List<AssetEntity>>(
@@ -134,11 +145,13 @@ class AssetPickerDelegate {
134145
PickerProvider extends AssetPickerProvider<Asset, Path>>(
135146
BuildContext context, {
136147
required AssetPickerBuilderDelegate<Asset, Path> delegate,
148+
PermissionRequestOption permissionRequestOption =
149+
const PermissionRequestOption(),
137150
Key? key,
138151
bool useRootNavigator = true,
139152
AssetPickerPageRouteBuilder<List<Asset>>? pageRouteBuilder,
140153
}) async {
141-
await permissionCheck();
154+
await permissionCheck(requestOption: permissionRequestOption);
142155
final Widget picker = AssetPicker<Asset, Path>(
143156
key: key,
144157
builder: delegate,

lib/src/widget/asset_picker.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ class AssetPicker<Asset, Path> extends StatefulWidget {
3131
}
3232

3333
/// {@macro wechat_assets_picker.delegates.AssetPickerDelegate.permissionCheck}
34-
static Future<PermissionState> permissionCheck() {
35-
return _pickerDelegate.permissionCheck();
34+
static Future<PermissionState> permissionCheck({
35+
PermissionRequestOption requestOption = const PermissionRequestOption(),
36+
}) {
37+
return _pickerDelegate.permissionCheck(requestOption: requestOption);
3638
}
3739

3840
/// {@macro wechat_assets_picker.delegates.AssetPickerDelegate.pickAssets}

lib/src/widget/asset_picker_viewer.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@ class AssetPickerViewer<Asset, Path> extends StatefulWidget {
4141
int? maxAssets,
4242
bool shouldReversePreview = false,
4343
AssetSelectPredicate<AssetEntity>? selectPredicate,
44+
PermissionRequestOption permissionRequestOption =
45+
const PermissionRequestOption(),
4446
}) async {
45-
await AssetPicker.permissionCheck();
47+
await AssetPicker.permissionCheck(requestOption: permissionRequestOption);
4648
final Widget viewer = AssetPickerViewer<AssetEntity, AssetPathEntity>(
4749
builder: DefaultAssetPickerViewerBuilderDelegate(
4850
currentIndex: currentIndex,
@@ -82,8 +84,10 @@ class AssetPickerViewer<Asset, Path> extends StatefulWidget {
8284
static Future<List<A>?> pushToViewerWithDelegate<A, P>(
8385
BuildContext context, {
8486
required AssetPickerViewerBuilderDelegate<A, P> delegate,
87+
PermissionRequestOption permissionRequestOption =
88+
const PermissionRequestOption(),
8589
}) async {
86-
await AssetPicker.permissionCheck();
90+
await AssetPicker.permissionCheck(requestOption: permissionRequestOption);
8791
final Widget viewer = AssetPickerViewer<A, P>(builder: delegate);
8892
final PageRouteBuilder<List<A>> pageRoute = PageRouteBuilder<List<A>>(
8993
pageBuilder: (_, __, ___) => viewer,

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: wechat_assets_picker
2-
version: 8.9.0-dev.1
2+
version: 9.0.0-dev.1
33
description: |
44
An image picker (also with videos and audio)
55
for Flutter projects based on WeChat's UI,

0 commit comments

Comments
 (0)