selected_files.dart 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // @dart=2.9
  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.firstWhere(
  12. (element) => element.generatedID == file.generatedID,
  13. orElse: () => null,
  14. );
  15. if (alreadySelected != null) {
  16. files.remove(alreadySelected);
  17. } else {
  18. files.add(file);
  19. }
  20. lastSelections.clear();
  21. lastSelections.add(file);
  22. notifyListeners();
  23. }
  24. bool isFileSelected(File file) {
  25. final File alreadySelected = files.firstWhere(
  26. (element) => element.generatedID == file.generatedID,
  27. orElse: () => null,
  28. );
  29. return alreadySelected != null;
  30. }
  31. bool isPartOfLastSection(File file) {
  32. final File alreadySelected = lastSelections.firstWhere(
  33. (element) => element.generatedID == file.generatedID,
  34. orElse: () => null,
  35. );
  36. return alreadySelected != null;
  37. }
  38. void clearAll() {
  39. lastSelections.addAll(files);
  40. files.clear();
  41. notifyListeners();
  42. }
  43. }