From 7599d019d0a032b1a1a7e35953c4d108a863de91 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 7 Dec 2023 15:11:34 +0530 Subject: [PATCH] fix: reload UI when items are deleted or hidden from search result screen --- .../search/result/search_result_page.dart | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/lib/ui/viewer/search/result/search_result_page.dart b/lib/ui/viewer/search/result/search_result_page.dart index f043574b9..c96672cef 100644 --- a/lib/ui/viewer/search/result/search_result_page.dart +++ b/lib/ui/viewer/search/result/search_result_page.dart @@ -1,3 +1,5 @@ +import "dart:async"; + import 'package:flutter/material.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/events/files_updated_event.dart'; @@ -11,23 +13,54 @@ import 'package:photos/ui/viewer/actions/file_selection_overlay_bar.dart'; import 'package:photos/ui/viewer/gallery/gallery.dart'; import 'package:photos/ui/viewer/gallery/gallery_app_bar_widget.dart'; -class SearchResultPage extends StatelessWidget { +class SearchResultPage extends StatefulWidget { final SearchResult searchResult; final String tagPrefix; - final _selectedFiles = SelectedFiles(); static const GalleryType appBarType = GalleryType.searchResults; static const GalleryType overlayType = GalleryType.searchResults; - SearchResultPage( + const SearchResultPage( this.searchResult, { this.tagPrefix = "", Key? key, }) : super(key: key); + @override + State createState() => _SearchResultPageState(); +} + +class _SearchResultPageState extends State { + final _selectedFiles = SelectedFiles(); + late final List files; + late final StreamSubscription _filesUpdatedEvent; + + @override + void initState() { + super.initState(); + files = widget.searchResult.resultFiles(); + _filesUpdatedEvent = + Bus.instance.on().listen((event) { + if (event.type == EventType.deletedFromDevice || + event.type == EventType.deletedFromEverywhere || + event.type == EventType.deletedFromRemote || + event.type == EventType.hide) { + for (var updatedFile in event.updatedFiles) { + files.remove(updatedFile); + } + setState(() {}); + } + }); + } + + @override + void dispose() { + _filesUpdatedEvent.cancel(); + super.dispose(); + } + @override Widget build(BuildContext context) { - final List files = searchResult.resultFiles(); final gallery = Gallery( asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) { final result = files @@ -48,17 +81,18 @@ class SearchResultPage extends StatelessWidget { removalEventTypes: const { EventType.deletedFromRemote, EventType.deletedFromEverywhere, + EventType.hide, }, - tagPrefix: tagPrefix + searchResult.heroTag(), + tagPrefix: widget.tagPrefix + widget.searchResult.heroTag(), selectedFiles: _selectedFiles, - initialFiles: [searchResult.resultFiles().first], + initialFiles: [widget.searchResult.resultFiles().first], ); return Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(50.0), child: GalleryAppBarWidget( - appBarType, - searchResult.name(), + SearchResultPage.appBarType, + widget.searchResult.name(), _selectedFiles, ), ), @@ -67,7 +101,7 @@ class SearchResultPage extends StatelessWidget { children: [ gallery, FileSelectionOverlayBar( - overlayType, + SearchResultPage.overlayType, _selectedFiles, ), ],