Skip to content

Commit e657ca4

Browse files
authored
🐛 Fix the experience with shouldRevertGrid (#552)
Address #546 (comment).
1 parent dec7f51 commit e657ca4

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ that can be found in the LICENSE file. -->
1616

1717
### Fixes
1818

19-
- Fix previewing selected assets behavior.
19+
- Fix previewing selected assets' behavior.
2020
- Use `PermissionRequestOption` as much as possible.
2121
- Raise more errors for non-synced paths.
22+
- Fix the experience with `shouldRevertGrid`.
2223

2324
## 9.0.0-dev.2
2425

lib/src/constants/typedefs.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import 'package:flutter/widgets.dart';
88
import 'package:photo_manager/photo_manager.dart' show PermissionState;
99
import 'package:provider/provider.dart';
1010

11-
/// {@nodoc}
11+
/// Mirroring [ChangeNotifierProvider].
1212
typedef CNP<T extends ChangeNotifier?> = ChangeNotifierProvider<T>;
1313

1414
/// {@template wechat_assets_picker.LoadingIndicatorBuilder}

lib/src/delegates/asset_picker_builder_delegate.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -883,7 +883,8 @@ class DefaultAssetPickerBuilderDelegate
883883
provider.selectedAssets.isNotEmpty)) {
884884
return;
885885
}
886-
final List<AssetEntity> current;
886+
final revert = effectiveShouldRevertGrid(context);
887+
List<AssetEntity> current;
887888
final List<AssetEntity>? selected;
888889
final int effectiveIndex;
889890
if (isWeChatMoment) {
@@ -905,7 +906,10 @@ class DefaultAssetPickerBuilderDelegate
905906
} else {
906907
current = provider.currentAssets;
907908
selected = provider.selectedAssets;
908-
effectiveIndex = index;
909+
effectiveIndex = revert ? current.length - index - 1 : index;
910+
}
911+
if (revert && index == null) {
912+
current = current.reversed.toList(growable: false);
909913
}
910914
final List<AssetEntity>? result = await AssetPickerViewer.pushToViewer(
911915
context,
@@ -918,7 +922,7 @@ class DefaultAssetPickerBuilderDelegate
918922
selectorProvider: provider,
919923
specialPickerType: specialPickerType,
920924
maxAssets: provider.maxAssets,
921-
shouldReversePreview: isAppleOS(context),
925+
shouldReversePreview: revert,
922926
);
923927
if (result != null) {
924928
Navigator.of(context).maybePop(result);

lib/src/delegates/asset_picker_viewer_builder_delegate.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,9 @@ class DefaultAssetPickerViewerBuilderDelegate
410410

411411
@override
412412
Widget assetPageBuilder(BuildContext context, int index) {
413-
final AssetEntity asset = previewAssets.elementAt(index);
413+
final AssetEntity asset = previewAssets.elementAt(
414+
shouldReversePreview ? previewAssets.length - index - 1 : index,
415+
);
414416
final Widget builder = switch (asset.type) {
415417
AssetType.audio => AudioPageBuilder(asset: asset),
416418
AssetType.image => ImagePageBuilder(
@@ -634,7 +636,10 @@ class DefaultAssetPickerViewerBuilderDelegate
634636
stream: pageStreamController.stream,
635637
builder: (_, AsyncSnapshot<int> snapshot) {
636638
final AssetEntity asset = selectedAssets!.elementAt(index);
637-
final bool isViewing = previewAssets[snapshot.data!] == asset;
639+
final viewingIndex = shouldReversePreview
640+
? previewAssets.length - snapshot.data! - 1
641+
: snapshot.data!;
642+
final bool isViewing = previewAssets[viewingIndex] == asset;
638643
final Widget item = switch (asset.type) {
639644
AssetType.image => _imagePreviewItem(asset),
640645
AssetType.video => _videoPreviewItem(asset),
@@ -930,7 +935,6 @@ class DefaultAssetPickerViewerBuilderDelegate
930935
controller: pageController,
931936
itemCount: previewAssets.length,
932937
itemBuilder: assetPageBuilder,
933-
reverse: shouldReversePreview,
934938
onPageChanged: (int index) {
935939
currentIndex = index;
936940
pageStreamController.add(index);

0 commit comments

Comments
 (0)