代码之家  ›  专栏  ›  技术社区  ›  Chris

Flutter Algolia搜索带去抖动的TextField

  •  0
  • Chris  · 技术社区  · 2 年前

    我实施了 Algolia 在我的项目中,就像在这个 example (没有过滤器)并且它正在工作。

    现在我想添加一个 去跳动 所以我不搜索每一个关键笔划,而是等待500毫秒直到搜索。如果用户键入另一个字母,则该计时器将重置。

    我正在使用建议的 HitsSearcher 它有一个 debounce 字段,但改变了它,对我来说并没有什么改变。结果仍然会立即显示出来。

    我还试着用计时器来实现这一点,这会导致暂停,但在暂停之后,只要有新的更改出现,它就会被触发。所以计时器实际上永远不会被取消。

    在我的 init :

    _searchTextEditingController.addListener(
      () => _startTimer(),
    );
    

    _startTimer() :

     _startTimer() {
        _timer = Timer(
          const Duration(milliseconds: 2000),
          () {
            print('finished');
            _userSearcher.applyState(
              (state) => state.copyWith(
                query: _searchTextEditingController.text,
                page: 0,
              ),
            );
          },
        );
      }
    

    那么我该如何做到这一点呢?我这样做是为了减少algolia上的搜索请求。

    如果你需要更多信息,请告诉我!

    编辑

    这个问题不是由建议的问题解决的。Debounce工作不正常,给了我错误的搜索结果。

    0 回复  |  直到 1 年前
        1
  •  1
  •   Chris    1 年前

    我不得不移除 addListener 而是使用建议问题中的建议答案,并将其放在我的 onChanged 我的 _onSearchChanged 现在看起来是这样的:

      _onSearchChanged(String query) {
        if (_debounce?.isActive ?? false) {
          _debounce?.cancel();
        }
    
        _debounce = Timer(const Duration(milliseconds: 500), () {
          _userSearcher.applyState(
            (state) => state.copyWith(
              query: _searchTextEditingController.text,
              page: 0,
            ),
          );
        });
      }