我有一个搜索栏,它会在用户输入内容 1 秒后执行休息调用。但是,如果用户输入更多字母,例如“asd”,实际上它将执行 3 个请求,一个用于“a”,一个用于“s”,一个用于“d”。有没有一种方法可以在用户停止时只进行一次调用?
代码是:
appBarTitle = new TextField(
controller: _filterController,
decoration: new InputDecoration(
hintText: 'Search...'
)
);
_filterController.addListener(() {
if (_filterController.text.isEmpty) {
} else {
Future.delayed(Duration(seconds: 1), () {
userWrites(_filterController.text);
});
}
});
userWrites(String filterName){
try {
//TODO: call
}catch(_) {
}
}
最佳答案
不知道它是否仍然有用,但我使用 Timer 类解决了它。
Timer timer;
appBarTitle = new TextField(
controller: _filterController,
decoration: new InputDecoration(
hintText: 'Search...'
)
);
_filterController.addListener(() {
if (_filterController.text.isEmpty) {
} else {
if(timer != null){
timer.cancel();
timer = null;
}
timer = Timer(Duration(seconds: 1), userWrites);
}
});
userWrites(){
try {
print(_filterController.text);
//TODO: call
}catch(_) {
}
}
关于rest - Flutter:搜索栏-延迟后向服务器发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54744051/