Skip to content

Commit 37e3139

Browse files
committed
AssetPickerViewer.pushToViewerWithDelegate
1 parent 749ffc8 commit 37e3139

File tree

2 files changed

+49
-44
lines changed

2 files changed

+49
-44
lines changed

lib/src/widget/asset_picker.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class AssetPicker<A, P> extends StatelessWidget {
1717

1818
final AssetPickerBuilderDelegate<A, P> builder;
1919

20-
static Future<void> _permissionCheck() async {
20+
static Future<void> permissionCheck() async {
2121
final PermissionState _ps = await PhotoManager.requestPermissionExtend();
2222
if (_ps != PermissionState.authorized && _ps != PermissionState.limited) {
2323
throw StateError('Permission state error with $_ps.');
@@ -80,7 +80,7 @@ class AssetPicker<A, P> extends StatelessWidget {
8080
throw ArgumentError('Custom item did not set properly.');
8181
}
8282

83-
await _permissionCheck();
83+
await permissionCheck();
8484

8585
final DefaultAssetPickerProvider provider = DefaultAssetPickerProvider(
8686
maxAssets: maxAssets,
@@ -136,7 +136,7 @@ class AssetPicker<A, P> extends StatelessWidget {
136136
Curve routeCurve = Curves.easeIn,
137137
Duration routeDuration = const Duration(milliseconds: 300),
138138
}) async {
139-
await _permissionCheck();
139+
await permissionCheck();
140140

141141
final Widget picker =
142142
ChangeNotifierProvider<AssetPickerProvider<A, P>>.value(

lib/src/widget/asset_picker_viewer.dart

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -34,47 +34,52 @@ class AssetPickerViewer<A, P> extends StatefulWidget {
3434
SpecialPickerType? specialPickerType,
3535
int? maxAssets,
3636
}) async {
37-
try {
38-
final Widget viewer = AssetPickerViewer<AssetEntity, AssetPathEntity>(
39-
builder: DefaultAssetPickerViewerBuilderDelegate(
40-
currentIndex: currentIndex,
41-
previewAssets: previewAssets,
42-
provider: selectedAssets != null
43-
? AssetPickerViewerProvider<AssetEntity>(selectedAssets)
44-
: null,
45-
themeData: themeData,
46-
previewThumbSize: previewThumbSize,
47-
specialPickerType: specialPickerType,
48-
selectedAssets: selectedAssets,
49-
selectorProvider: selectorProvider,
50-
maxAssets: maxAssets,
51-
),
52-
);
53-
final PageRouteBuilder<List<AssetEntity>> pageRoute =
54-
PageRouteBuilder<List<AssetEntity>>(
55-
pageBuilder: (
56-
BuildContext context,
57-
Animation<double> animation,
58-
Animation<double> secondaryAnimation,
59-
) {
60-
return viewer;
61-
},
62-
transitionsBuilder: (
63-
BuildContext context,
64-
Animation<double> animation,
65-
Animation<double> secondaryAnimation,
66-
Widget child,
67-
) {
68-
return FadeTransition(opacity: animation, child: child);
69-
},
70-
);
71-
final List<AssetEntity>? result =
72-
await Navigator.of(context).push<List<AssetEntity>>(pageRoute);
73-
return result;
74-
} catch (e) {
75-
realDebugPrint('Error when calling assets picker viewer: $e');
76-
return null;
77-
}
37+
await AssetPicker.permissionCheck();
38+
final Widget viewer = AssetPickerViewer<AssetEntity, AssetPathEntity>(
39+
builder: DefaultAssetPickerViewerBuilderDelegate(
40+
currentIndex: currentIndex,
41+
previewAssets: previewAssets,
42+
provider: selectedAssets != null
43+
? AssetPickerViewerProvider<AssetEntity>(selectedAssets)
44+
: null,
45+
themeData: themeData,
46+
previewThumbSize: previewThumbSize,
47+
specialPickerType: specialPickerType,
48+
selectedAssets: selectedAssets,
49+
selectorProvider: selectorProvider,
50+
maxAssets: maxAssets,
51+
),
52+
);
53+
final PageRouteBuilder<List<AssetEntity>> pageRoute =
54+
PageRouteBuilder<List<AssetEntity>>(
55+
pageBuilder: (_, __, ___) => viewer,
56+
transitionsBuilder: (_, Animation<double> animation, __, Widget child) {
57+
return FadeTransition(opacity: animation, child: child);
58+
},
59+
);
60+
final List<AssetEntity>? result =
61+
await Navigator.of(context).push<List<AssetEntity>>(pageRoute);
62+
return result;
63+
}
64+
65+
/// Call the viewer with provided delegate and provider.
66+
/// 通过指定的 [delegate] 调用查看器
67+
static Future<List<A>?> pushToViewerWithDelegate<A, P>(
68+
BuildContext context, {
69+
required AssetPickerViewerBuilderDelegate<A, P> delegate,
70+
}) async {
71+
await AssetPicker.permissionCheck();
72+
final Widget viewer = AssetPickerViewer<A, P>(builder: delegate);
73+
final PageRouteBuilder<List<A>> pageRoute = PageRouteBuilder<List<A>>(
74+
pageBuilder: (_, __, ___) => viewer,
75+
transitionsBuilder: (_, Animation<double> animation, __, Widget child) {
76+
return FadeTransition(opacity: animation, child: child);
77+
},
78+
);
79+
final List<A>? result = await Navigator.of(context).push<List<A>>(
80+
pageRoute,
81+
);
82+
return result;
7883
}
7984
}
8085

0 commit comments

Comments
 (0)