algolia / algoliasearch-helper-flutter

āš”ļø Building block to create instant-search applications with Flutter
https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/flutter/
Other
21 stars 14 forks source link

HitSearcher is fetching data from Algolia already when just initially adding a stream listener #122

Open derFunk opened 5 months ago

derFunk commented 5 months ago

Describe the bug šŸ›

TL;DR: Algolia backend gets called with a search immediately after adding a listener function to the response stream, even before actively starting a search by executing the hitsSearcher.query(String query) method.

Long version:

I'm following Getting started with Flutter Helper, but want to use algolia_helper_flutter without infinite_scroll_pagination and following clean architecture using the BLoC pattern.

I'm initializing the HitsSearcher in my BLoC constructor the common way like this:

_productsSearcher = HitsSearcher(applicationID: 'latency',
                                        apiKey: '927c3fe76d4b52c5a2912973f35a3077',
                                        indexName: 'STAGING_native_ecom_demo_products');

I also want to add a listener to the responses stream as soon as responses are coming in after queries.

I can do that with

_productsSearcher.responses.listen(_searchPageListener);

āš ļø As soon as I call listen() to add the listener function, HitsSearcher executes a call to the Algolia backend. This I don't want, because I'm still in the setup phase in my BLoC constructor.

This call is happening because when accessing the responses stream, this code is executed: searchService.search(req.state): https://github.com/algolia/algoliasearch-helper-flutter/blob/0b0154a5aed1a198239cc957ab05a68abbbe1d2a/helper/lib/src/searcher/hits_searcher.dart#L272

..which in turn executes this: https://github.com/algolia/algoliasearch-helper-flutter/blob/0b0154a5aed1a198239cc957ab05a68abbbe1d2a/helper/lib/src/service/algolia_hits_search_service.dart#L77

To Reproduce šŸ”

  1. Initialize HitsSearcher()
  2. Add a listener function to the response stream
  3. :x: See listener function being called immediately, even without a call to hitsSearcher.query() before.

Expected behavior šŸ’­

Algolia search does not get called immediately when adding the response listener, but only after calling searcher.query()

Environment:

Additional context

Thanks for supporting Flutter ā¤ļø

ivangr1 commented 3 months ago

I am encountering the same issue. Did you manage to solve it maybe?