当 Riverpod Provider 更改时,SearchAnchor 的 Flutter SuggestionBuilder 不会更新

问题描述 投票:0回答:1

我正在使用 Flutter 构建一个搜索栏,每当用户搜索某些内容时,我需要向后端发出 API 请求以获取建议。当获取这些建议时,我想使用 SearchAnchor 的 suggestBuilder 来显示它们,如下所示:

  SearchAnchor stationSearchBar(PlannerViewModel plannerState) {
    plannerState.searchController.addListener(() {
      plannerState.searchInputChanged(plannerState.searchController.text);
    });
    return SearchAnchor(
        isFullScreen: false,
        searchController: plannerState.searchController,
        builder: (BuildContext context, SearchController controller) {
          return SearchBar(
              textCapitalization: TextCapitalization.none,
              controller: plannerState.searchController,
              onTap: () => plannerState.searchController.openView());
        },
        suggestionsBuilder:
            (BuildContext context, SearchController controller) {
          return [
            for (Station result in plannerState.searchResults)
              ListTile(
                title: Text(result.names.values.first),
              )
          ];
        });
  }

plannerState 是 RiverPod 提供者,这是用于获取建议的函数:

Future<void> _searchStations(String query) async {
    print("searching $query");
    searchResults = await StationService().findStation(query);
    print("found ${searchResults.length}");
    notifyListeners();
  }

发生的情况是,当用户输入内容时,首先重建建议列表(使用之前搜索的数据),然后执行 API 请求,在请求之后,suggestionBuilder 不会重建其列表。所有其他状态管理工作正常。 我该如何解决这个问题,我可以以某种方式强制重新加载 suggestBuilder 或类似的东西吗?

flutter dart autocomplete searchbar search-suggestion
1个回答
0
投票

我尝试将它与 Provider 一起使用,但我得到了与您相同的行为。将其与

FutureBuilder
一起使用将在每次更改时运行
StationService().findStation(query)
,因此我认为这不是这种情况的最佳实践,而是一种解决方法。请查看此处了解更多详情。

© www.soinside.com 2019 - 2024. All rights reserved.