import 'package:photo_manager/photo_manager.dart'; part './sort_asset_delegate.dart'; /// SortPathDelegate abstract class SortDelegate { final SortAssetDelegate assetDelegate; const SortDelegate({ this.assetDelegate = const DefaultAssetDelegate(), }); void sort(List list); static const none = DefaultSortDelegate(); static const common = CommonSortDelegate(); } class DefaultSortDelegate extends SortDelegate { const DefaultSortDelegate({ SortAssetDelegate assetDelegate = const DefaultAssetDelegate(), }) : super(assetDelegate: assetDelegate); @override void sort(List list) {} } class CommonSortDelegate extends SortDelegate { const CommonSortDelegate({ SortAssetDelegate assetDelegate = const DefaultAssetDelegate(), }) : super(assetDelegate: assetDelegate); @override void sort(List list) { list.sort((path1, path2) { if (path1.isAll) { return -1; } if (path2.isAll) { return 1; } if (_isCamera(path1)) { return -1; } if (_isCamera(path2)) { return 1; } if (_isScreenShot(path1)) { return -1; } if (_isScreenShot(path2)) { return 1; } return otherSort(path1, path2); }); } int otherSort(AssetPathEntity path1, AssetPathEntity path2) { return path1.name.compareTo(path2.name); } bool _isCamera(AssetPathEntity entity) { return entity.name.toUpperCase() == "camera".toUpperCase(); } bool _isScreenShot(AssetPathEntity entity) { return entity.name.toUpperCase() == "screenshots".toUpperCase() || entity.name.toUpperCase() == "screenshot".toUpperCase(); } }