Browse Source

temp step 1

ashilkn 1 year ago
parent
commit
7c94c579ea

+ 6 - 29
lib/ui/search_tab.dart

@@ -2,10 +2,8 @@ import "package:fade_indexed_stack/fade_indexed_stack.dart";
 import "package:flutter/material.dart";
 import "package:flutter_animate/flutter_animate.dart";
 import "package:photos/core/constants.dart";
-import "package:photos/models/search/search_result.dart";
 import "package:photos/models/search/search_types.dart";
 import "package:photos/states/all_sections_examples_state.dart";
-import "package:photos/states/search_results_state.dart";
 import "package:photos/ui/common/loading_widget.dart";
 import "package:photos/ui/viewer/search/result/no_result_widget.dart";
 import "package:photos/ui/viewer/search/search_section.dart";
@@ -20,40 +18,19 @@ class SearchTab extends StatefulWidget {
 }
 
 class _SearchTabState extends State<SearchTab> {
-  // var _searchResults = <SearchResult>[];
-  late Stream<List<SearchResult>>? _searchResults;
-  int index = 0;
-
-  @override
-  void didChangeDependencies() {
-    super.didChangeDependencies();
-    _searchResults = InheritedSearchResults.of(context).searchResultsStream;
-    print(
-      "____ Updating dependencies for SearchTabState. New stream : ${_searchResults.hashCode}",
-    );
-    // if (_searchResults.isEmpty) {
-    //   if (isSearchQueryEmpty) {
-    //     index = 0;
-    //   } else {
-    //     index = 2;
-    //   }
-    // } else {
-    //   index = 1;
-    // }
-    index = 1;
-  }
+  int index = 1;
 
   @override
   Widget build(BuildContext context) {
-    print("_____ rebuilding SearchTab with stream: ${_searchResults.hashCode}");
+    // print("_____ rebuilding SearchTab with stream: ${_searchResults.hashCode}");
     return AllSectionsExamplesProvider(
       child: FadeIndexedStack(
         duration: const Duration(milliseconds: 150),
         index: index,
-        children: [
-          const AllSearchSections(),
-          SearchSuggestionsWidget(_searchResults),
-          const NoResultWidget(),
+        children: const [
+          AllSearchSections(),
+          SearchSuggestionsWidget(),
+          NoResultWidget(),
         ],
       ),
     );

+ 34 - 28
lib/ui/viewer/search/search_suggestions.dart

@@ -11,6 +11,7 @@ import 'package:photos/models/search/search_result.dart';
 import "package:photos/services/collections_service.dart";
 import "package:photos/ui/viewer/gallery/collection_page.dart";
 import "package:photos/ui/viewer/search/result/search_result_widget.dart";
+import "package:photos/ui/viewer/search/search_widget.dart";
 import "package:photos/utils/navigation_util.dart";
 
 ///Not using StreamBuilder in this widget for rebuilding on every new event as
@@ -18,10 +19,7 @@ import "package:photos/utils/navigation_util.dart";
 ///fast. Instead, we usi a queue to store the events and then generate the
 ///widgets from the queue at regular intervals.
 class SearchSuggestionsWidget extends StatefulWidget {
-  final Stream<List<SearchResult>>? results;
-
-  const SearchSuggestionsWidget(
-    this.results, {
+  const SearchSuggestionsWidget({
     Key? key,
   }) : super(key: key);
 
@@ -31,38 +29,46 @@ class SearchSuggestionsWidget extends StatefulWidget {
 }
 
 class _SearchSuggestionsWidgetState extends State<SearchSuggestionsWidget> {
-  late Stream<List<SearchResult>>? resultsStream;
+  Stream<List<SearchResult>>? resultsStream;
   final queueOfEvents = <List<SearchResult>>[];
   var searchResultWidgets = <Widget>[];
   StreamSubscription<List<SearchResult>>? subscription;
   Timer? timer;
-  @override
-  initState() {
-    super.initState();
-    resultsStream = widget.results;
-    subscription = resultsStream?.listen((event) {
-      queueOfEvents.add(event);
-    });
-    //ondone, cancel subscription, get the total number of results and show in UI
-  }
+
+  // @override
+  // void didChangeDependencies() {
+  //   super.didChangeDependencies();
+
+  //   searchResultWidgets.clear();
+  //   releaseResources();
+  //   resultsStream = InheritedSearchResults.of(context).searchResultsStream;
+  //   subscription = resultsStream?.listen((event) {
+  //     if (event.isNotEmpty) {
+  //       //update a index value notifier for indexed stack here and rebuild the indexedStack widget.
+  //       //Also, add dependecy to inherited widget on changing stream in this widget and not on the serach tab.
+  //       queueOfEvents.add(event);
+  //     }
+  //   });
+  //   generateResultWidgetsInIntervalsFromQueue();
+  // }
 
   @override
-  didUpdateWidget(SearchSuggestionsWidget oldWidget) {
-    super.didUpdateWidget(oldWidget);
-    if (widget.results != oldWidget.results) {
-      setState(() {
-        print(
-          "____ in didUpdateWidget. Updating stream from ${resultsStream.hashCode} to ${widget.results.hashCode}",
-        );
-        searchResultWidgets.clear();
-        releaseResources();
-        resultsStream = widget.results;
-        subscription = resultsStream?.listen((event) {
+  void initState() {
+    super.initState();
+    SearchWidgetState.searchResultsStreamNotifier.addListener(() {
+      final value = SearchWidgetState.searchResultsStreamNotifier.value;
+      searchResultWidgets.clear();
+      releaseResources();
+      resultsStream = value;
+      subscription = resultsStream?.listen((event) {
+        if (event.isNotEmpty) {
+          //update a index value notifier for indexed stack here and rebuild the indexedStack widget.
+          //Also, add dependecy to inherited widget on changing stream in this widget and not on the serach tab.
           queueOfEvents.add(event);
-        });
-        generateResultWidgetsInIntervalsFromQueue();
+        }
       });
-    }
+      generateResultWidgetsInIntervalsFromQueue();
+    });
   }
 
   void releaseResources() {

+ 4 - 9
lib/ui/viewer/search/search_widget.dart

@@ -8,7 +8,6 @@ import "package:photos/events/clear_and_unfocus_search_bar_event.dart";
 import "package:photos/events/tab_changed_event.dart";
 import "package:photos/models/search/search_result.dart";
 import "package:photos/services/search_service.dart";
-import "package:photos/states/search_results_state.dart";
 import "package:photos/theme/ente_theme.dart";
 import "package:photos/ui/viewer/search/search_suffix_icon_widget.dart";
 import "package:photos/utils/date_time_util.dart";
@@ -24,6 +23,8 @@ class SearchWidget extends StatefulWidget {
 }
 
 class SearchWidgetState extends State<SearchWidget> {
+  static ValueNotifier<Stream<List<SearchResult>>?>
+      searchResultsStreamNotifier = ValueNotifier(null);
   static String query = "";
   final _searchService = SearchService.instance;
   final _debouncer = Debouncer(const Duration(milliseconds: 200));
@@ -105,15 +106,9 @@ class SearchWidgetState extends State<SearchWidget> {
     //     await getSearchResultsForQuery(context, value);
 
     _debouncer.run(() async {
-      final Stream<List<SearchResult>> searchResultsStream =
-          _getSearchResultsStream(context, query);
-
       if (mounted) {
-        print(
-          "Updating to new stream (${searchResultsStream.hashCode}) with query: $query",
-        );
-        final inheritedSearchResults = InheritedSearchResults.of(context);
-        inheritedSearchResults.updateStream(searchResultsStream);
+        searchResultsStreamNotifier.value =
+            _getSearchResultsStream(context, query);
       }
 
       // await for (final value in searchResultsStream) {