浏览代码

Switch to using a LinkedHashSet to ensure there are no duplicate elements

vishnukvmd 2 年之前
父节点
当前提交
770be776d7

+ 1 - 1
lib/models/selected_files.dart

@@ -5,7 +5,7 @@ import 'package:photos/events/clear_selections_event.dart';
 import 'package:photos/models/file.dart';
 
 class SelectedFiles extends ChangeNotifier {
-  final files = <File>[];
+  final files = <File>{};
   final lastSelections = <File>{};
 
   void toggleSelection(File file) {

+ 2 - 2
lib/ui/collections_list_widget.dart

@@ -424,7 +424,7 @@ class CollectionsListWidget extends StatelessWidget {
       await CollectionsService.instance.move(
         toCollectionID,
         fromCollectionID,
-        selectedFiles!.files,
+        selectedFiles!.files.toList(),
       );
       await dialog.hide();
       RemoteSyncService.instance.sync(silently: true);
@@ -455,7 +455,7 @@ class CollectionsListWidget extends StatelessWidget {
     await dialog.show();
     try {
       await CollectionsService.instance
-          .restore(toCollectionID, selectedFiles!.files);
+          .restore(toCollectionID, selectedFiles!.files.toList());
       RemoteSyncService.instance.sync(silently: true);
       selectedFiles?.clearAll();
       await dialog.hide();

+ 2 - 2
lib/ui/viewer/actions/file_selection_actions_widget.dart

@@ -412,7 +412,7 @@ class _FileSelectionActionWidgetState extends State<FileSelectionActionWidget> {
   Future<void> _onCreateCollageClicked() async {
     final bool? result = await routeToPage(
       context,
-      CollageCreatorPage(widget.selectedFiles.files),
+      CollageCreatorPage(widget.selectedFiles.files.toList()),
     );
     if (result != null && result) {
       widget.selectedFiles.clearAll();
@@ -502,7 +502,7 @@ class _FileSelectionActionWidgetState extends State<FileSelectionActionWidget> {
   Future<void> _permanentlyDelete() async {
     if (await deleteFromTrash(
       context,
-      widget.selectedFiles.files,
+      widget.selectedFiles.files.toList(),
     )) {
       widget.selectedFiles.clearAll();
     }

+ 3 - 3
lib/ui/viewer/actions/file_selection_overlay_bar.dart

@@ -104,7 +104,7 @@ class _FileSelectionOverlayBarState extends State<FileSelectionOverlayBar> {
           onTap: () async {
             if (await deleteFromTrash(
               context,
-              widget.selectedFiles.files,
+              widget.selectedFiles.files.toList(),
             )) {
               widget.selectedFiles.clearAll();
             }
@@ -120,7 +120,7 @@ class _FileSelectionOverlayBarState extends State<FileSelectionOverlayBar> {
         onTap: () => shareSelected(
           context,
           shareButtonKey,
-          widget.selectedFiles.files,
+          widget.selectedFiles.files.toList(),
         ),
       ),
     );
@@ -160,7 +160,7 @@ class _FileSelectionOverlayBarState extends State<FileSelectionOverlayBar> {
   Future<void> _onUnArchiveClick() async {
     await changeVisibility(
       context,
-      widget.selectedFiles.files,
+      widget.selectedFiles.files.toList(),
       visibleVisibility,
     );
     widget.selectedFiles.clearAll();

+ 3 - 3
lib/utils/delete_file_util.dart

@@ -537,7 +537,7 @@ Future<void> showDeleteSheet(
         onTap: () async {
           await deleteFilesFromRemoteOnly(
             context,
-            selectedFiles.files,
+            selectedFiles.files.toList(),
           ).then(
             (value) {
               showShortToast(context, S.of(context).movedToTrash);
@@ -564,7 +564,7 @@ Future<void> showDeleteSheet(
         shouldSurfaceExecutionStates: false,
         isInAlert: true,
         onTap: () async {
-          await deleteFilesOnDeviceOnly(context, selectedFiles.files);
+          await deleteFilesOnDeviceOnly(context, selectedFiles.files.toList());
         },
       ),
     );
@@ -583,7 +583,7 @@ Future<void> showDeleteSheet(
         onTap: () async {
           await deleteFilesFromEverywhere(
             context,
-            selectedFiles.files,
+            selectedFiles.files.toList(),
           );
         },
       ),