@@ -163,18 +163,19 @@ class _DirectoryFileAssetPickerState extends State<DirectoryFileAssetPicker> {
163
163
return GestureDetector (
164
164
onTap: isDisplayingDetail
165
165
? () async {
166
- final Widget viewer = AssetPickerViewer <File , Directory >(
167
- builder: FileAssetPickerViewerBuilderDelegate (
166
+ final result = await AssetPickerViewer .pushToViewerWithDelegate<
167
+ File ,
168
+ Directory ,
169
+ FileAssetPickerViewerProvider ,
170
+ FileAssetPickerViewerBuilderDelegate > (
171
+ context,
172
+ delegate: FileAssetPickerViewerBuilderDelegate (
168
173
currentIndex: index,
169
174
previewAssets: fileList,
170
175
provider: FileAssetPickerViewerProvider (fileList),
171
176
themeData: AssetPicker .themeData (themeColor),
172
177
),
173
178
);
174
- final List <File >? result =
175
- await Navigator .maybeOf (context)? .push <List <File >>(
176
- AssetPickerViewerPageRoute (builder: (context) => viewer),
177
- );
178
179
if (result != null && result != fileList) {
179
180
fileList
180
181
..clear ()
@@ -261,7 +262,8 @@ class _DirectoryFileAssetPickerState extends State<DirectoryFileAssetPicker> {
261
262
}
262
263
}
263
264
264
- class FileAssetPickerProvider extends AssetPickerProvider <File , Directory > {
265
+ final class FileAssetPickerProvider
266
+ extends AssetPickerProvider <File , Directory > {
265
267
FileAssetPickerProvider ({
266
268
required List <File > selectedAssets,
267
269
}) : super (selectedAssets: selectedAssets) {
@@ -346,7 +348,7 @@ class FileAssetPickerProvider extends AssetPickerProvider<File, Directory> {
346
348
}
347
349
}
348
350
349
- class FileAssetPickerBuilder
351
+ final class FileAssetPickerBuilder
350
352
extends AssetPickerBuilderDelegate <File , Directory > {
351
353
FileAssetPickerBuilder ({
352
354
required this .provider,
@@ -368,8 +370,13 @@ class FileAssetPickerBuilder
368
370
int ? index,
369
371
File currentAsset,
370
372
) async {
371
- final Widget viewer = AssetPickerViewer <File , Directory >(
372
- builder: FileAssetPickerViewerBuilderDelegate (
373
+ final result = await AssetPickerViewer .pushToViewerWithDelegate<
374
+ File ,
375
+ Directory ,
376
+ FileAssetPickerViewerProvider ,
377
+ FileAssetPickerViewerBuilderDelegate > (
378
+ context,
379
+ delegate: FileAssetPickerViewerBuilderDelegate (
373
380
currentIndex: index ?? provider.selectedAssets.indexOf (currentAsset),
374
381
previewAssets: provider.selectedAssets,
375
382
provider: FileAssetPickerViewerProvider (provider.selectedAssets),
@@ -378,39 +385,11 @@ class FileAssetPickerBuilder
378
385
selectorProvider: provider,
379
386
),
380
387
);
381
- final List <File >? result =
382
- await Navigator .maybeOf (context)? .push <List <File >?>(
383
- AssetPickerViewerPageRoute (builder: (context) => viewer),
384
- );
385
388
if (result != null ) {
386
389
Navigator .maybeOf (context)? .maybePop (result);
387
390
}
388
391
}
389
392
390
- Future <List <File >?> pushToPicker (
391
- BuildContext context, {
392
- required int index,
393
- required List <File > previewAssets,
394
- List <File >? selectedAssets,
395
- FileAssetPickerProvider ? selectorProvider,
396
- }) async {
397
- final Widget viewer = AssetPickerViewer <File , Directory >(
398
- builder: FileAssetPickerViewerBuilderDelegate (
399
- currentIndex: index,
400
- previewAssets: previewAssets,
401
- provider: selectedAssets != null
402
- ? FileAssetPickerViewerProvider (selectedAssets)
403
- : null ,
404
- themeData: AssetPicker .themeData (themeColor),
405
- selectedAssets: selectedAssets,
406
- selectorProvider: selectorProvider,
407
- ),
408
- );
409
- return await Navigator .maybeOf (context)? .push <List <File >?>(
410
- AssetPickerViewerPageRoute (builder: (context) => viewer),
411
- );
412
- }
413
-
414
393
@override
415
394
void selectAsset (BuildContext context, File asset, int index, bool selected) {
416
395
if (selected) {
@@ -975,23 +954,12 @@ class FileAssetPickerBuilder
975
954
976
955
@override
977
956
Widget previewButton (BuildContext context) {
978
- return Selector <FileAssetPickerProvider , bool >(
979
- selector : (_, FileAssetPickerProvider p) => p.isSelectedNotEmpty,
980
- builder : (_, bool isSelectedNotEmpty, __) {
957
+ return Consumer <FileAssetPickerProvider >(
958
+ builder : (_, p, __) {
959
+ final isSelectedNotEmpty = p.isSelectedNotEmpty;
981
960
return GestureDetector (
982
961
onTap: isSelectedNotEmpty
983
- ? () async {
984
- final List <File >? result = await pushToPicker (
985
- context,
986
- index: 0 ,
987
- previewAssets: provider.selectedAssets,
988
- selectedAssets: provider.selectedAssets,
989
- selectorProvider: provider,
990
- );
991
- if (result != null ) {
992
- Navigator .maybeOf (context)? .pop (result);
993
- }
994
- }
962
+ ? () => viewAsset (context, null , p.selectedAssets.first)
995
963
: null ,
996
964
child: Padding (
997
965
padding: const EdgeInsets .symmetric (vertical: 12.0 ),
@@ -1099,15 +1067,8 @@ class FileAssetPickerBuilder
1099
1067
selectedAssets.where ((File f) => f.path == asset.path).isNotEmpty;
1100
1068
return Positioned .fill (
1101
1069
child: GestureDetector (
1102
- onTap: () async {
1103
- final List <File >? result = await pushToPicker (
1104
- context,
1105
- index: index,
1106
- previewAssets: provider.currentAssets,
1107
- );
1108
- if (result != null ) {
1109
- Navigator .maybeOf (context)? .pop (result);
1110
- }
1070
+ onTap: () {
1071
+ viewAsset (context, index, asset);
1111
1072
},
1112
1073
child: AnimatedContainer (
1113
1074
duration: switchingPathDuration,
@@ -1159,7 +1120,8 @@ class FileAssetPickerBuilder
1159
1120
}
1160
1121
}
1161
1122
1162
- class FileAssetPickerViewerProvider extends AssetPickerViewerProvider <File > {
1123
+ final class FileAssetPickerViewerProvider
1124
+ extends AssetPickerViewerProvider <File > {
1163
1125
FileAssetPickerViewerProvider (List <File > super .assets);
1164
1126
1165
1127
@override
@@ -1170,18 +1132,19 @@ class FileAssetPickerViewerProvider extends AssetPickerViewerProvider<File> {
1170
1132
}
1171
1133
}
1172
1134
1173
- class FileAssetPickerViewerBuilderDelegate
1174
- extends AssetPickerViewerBuilderDelegate <File , Directory > {
1135
+ final class FileAssetPickerViewerBuilderDelegate
1136
+ extends AssetPickerViewerBuilderDelegate <File , Directory ,
1137
+ FileAssetPickerViewerProvider > {
1175
1138
FileAssetPickerViewerBuilderDelegate ({
1176
1139
required super .previewAssets,
1177
1140
required super .themeData,
1178
1141
required super .currentIndex,
1179
1142
super .selectedAssets,
1180
- super .selectorProvider,
1143
+ this .selectorProvider,
1181
1144
super .provider,
1182
- }) : super (
1183
- maxAssets : selectorProvider ? .maxAssets,
1184
- ) ;
1145
+ }) : super (maxAssets : selectorProvider ? .maxAssets);
1146
+
1147
+ final FileAssetPickerProvider ? selectorProvider ;
1185
1148
1186
1149
late final PageController _pageController = PageController (
1187
1150
initialPage: currentIndex,
0 commit comments