selected_files.dart 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import 'package:collection/collection.dart' show IterableExtension;
  2. import 'package:flutter/foundation.dart';
  3. import 'package:photos/models/file.dart';
  4. class SelectedFiles extends ChangeNotifier {
  5. final files = <File>{};
  6. final lastSelections = <File>{};
  7. void toggleSelection(File file) {
  8. // To handle the cases, where the file might have changed due to upload
  9. // or any other update, using file.generatedID to track if this file was already
  10. // selected or not
  11. final File? alreadySelected = files.firstWhereOrNull(
  12. (element) => element.generatedID == file.generatedID,
  13. );
  14. if (alreadySelected != null) {
  15. files.remove(alreadySelected);
  16. } else {
  17. files.add(file);
  18. }
  19. lastSelections.clear();
  20. lastSelections.add(file);
  21. notifyListeners();
  22. }
  23. bool isFileSelected(File file) {
  24. final File? alreadySelected = files.firstWhereOrNull(
  25. (element) => element.generatedID == file.generatedID,
  26. );
  27. return alreadySelected != null;
  28. }
  29. bool isPartOfLastSection(File file) {
  30. final File? alreadySelected = lastSelections.firstWhereOrNull(
  31. (element) => element.generatedID == file.generatedID,
  32. );
  33. return alreadySelected != null;
  34. }
  35. void clearAll() {
  36. lastSelections.addAll(files);
  37. files.clear();
  38. notifyListeners();
  39. }
  40. }