我正在使用 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 或类似的东西吗?
我尝试将它与 Provider 一起使用,但我得到了与您相同的行为。将其与
FutureBuilder
一起使用将在每次更改时运行 StationService().findStation(query)
,因此我认为这不是这种情况的最佳实践,而是一种解决方法。请查看此处了解更多详情。