【发布时间】:2021-08-16 12:11:36
【问题描述】:
我有一个集团(一段代码)
...
Stream<SearchState> _mapSearchSuggestionsEvent(SearchSuggestionsEvent event) async* {
final results = await _searchApi.getSuggestions(event.query);
yield SearchStateShowSuggestions(results);
}
...
并尝试去抖动事件以避免过多的网络调用
@override
Stream<Transition<SearchEvent, SearchState>> transformEvents(
Stream<SearchEvent> events, TransitionFunction<SearchEvent, SearchState> transitionFn) {
return events.debounceTime(Duration(milliseconds: 1000)).asyncExpand(transitionFn);
}
我还在 _searchApi.getSuggestions 方法中添加了日志。
我在日志中看到的内容:
I/flutter ( 4838): ???? [SearchApi] : getSuggestions
I/flutter ( 4838): ???? [SearchApi] : getSuggestions k
I/flutter ( 4838): ???? [SearchApi] : getSuggestions kr
I/flutter ( 4838): ???? [SearchApi] : getSuggestions kre
I/flutter ( 4838): ???? [SearchApi] : getSuggestions krev
I/flutter ( 4838): ???? [SearchApi] : getSuggestions kreve
等等……
添加事件:
_textEditingController.addListener(() {
_bloc.add(SearchSuggestionsEvent(_textEditingController.text));
});
也许我不明白,但为什么我在使用 debounce 时呼叫没有跳过?
【问题讨论】:
-
@pskink 每次查询发生变化时我都会调用
add