selected_files.dart 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import 'package:flutter/foundation.dart';
  2. import 'package:photos/models/file.dart';
  3. class SelectedFiles extends ChangeNotifier {
  4. final files = <File>{};
  5. final lastSelections = <File>{};
  6. void toggleSelection(File file) {
  7. // To handle the cases, where the file might have changed due to upload
  8. // or any other update, using file.generatedID to track if this file was already
  9. // selected or not
  10. final File alreadySelected = files.firstWhere(
  11. (element) => element.generatedID == file.generatedID,
  12. orElse: () => null,
  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.firstWhere(
  25. (element) => element.generatedID == file.generatedID,
  26. orElse: () => null,
  27. );
  28. return alreadySelected != null;
  29. }
  30. bool isPartOfLastSection(File file) {
  31. final File alreadySelected = lastSelections.firstWhere(
  32. (element) => element.generatedID == file.generatedID,
  33. orElse: () => null,
  34. );
  35. return alreadySelected != null;
  36. }
  37. void clearAll() {
  38. lastSelections.addAll(files);
  39. files.clear();
  40. notifyListeners();
  41. }
  42. }