Fix: selectedFiles use generatedId for tracking selected files

This commit is contained in:
Neeraj Gupta 2022-06-29 15:11:20 +05:30
parent d8dc6e3f03
commit d2c506f149
No known key found for this signature in database
GPG key ID: 3C5A1684DC1729E1
3 changed files with 30 additions and 7 deletions

View file

@ -6,16 +6,39 @@ class SelectedFiles extends ChangeNotifier {
final lastSelections = <File>{};
void toggleSelection(File file) {
if (files.contains(file)) {
files.remove(file);
// To handle the cases, where the file might have changed due to upload
// or any other update, using file.generatedID to track if this file was already
// selected or not
File alreadySelected = files.firstWhere(
(element) => element.generatedID == file.generatedID,
orElse: () => null,
);
if (alreadySelected != null) {
files.remove(alreadySelected);
} else {
files.add(file);
}
lastSelections.clear();
lastSelections.add(file);
lastSelections.add(alreadySelected ?? file);
notifyListeners();
}
bool isFileSelected(File file) {
File alreadySelected = files.firstWhere(
(element) => element.generatedID == file.generatedID,
orElse: () => null,
);
return alreadySelected != null;
}
bool isPartOfLastSection(File file) {
File alreadySelected = lastSelections.firstWhere(
(element) => element.generatedID == file.generatedID,
orElse: () => null,
);
return alreadySelected != null;
}
void clearAll() {
lastSelections.addAll(files);
files.clear();

View file

@ -217,7 +217,7 @@ class _LazyLoadingGridViewState extends State<LazyLoadingGridView> {
widget.selectedFiles.addListener(() {
bool shouldRefresh = false;
for (final file in widget.files) {
if (widget.selectedFiles.lastSelections.contains(file)) {
if (widget.selectedFiles.isPartOfLastSection(file)) {
shouldRefresh = true;
}
}
@ -322,7 +322,7 @@ class _LazyLoadingGridViewState extends State<LazyLoadingGridView> {
child: ColorFiltered(
colorFilter: ColorFilter.mode(
Colors.black.withOpacity(
widget.selectedFiles.files.contains(file) ? 0.4 : 0,
widget.selectedFiles.isFileSelected(file) ? 0.4 : 0,
),
BlendMode.darken,
),
@ -336,7 +336,7 @@ class _LazyLoadingGridViewState extends State<LazyLoadingGridView> {
),
),
Visibility(
visible: widget.selectedFiles.files.contains(file),
visible: widget.selectedFiles.isFileSelected(file),
child: Positioned(
right: 4,
top: 4,