Flutter 如何捕获textField小部件上的快速键入?
这种方式在每次输入更改时调用。问题是,当用户输入的速度很快,每次都调用api,搜索结果总是在变化。(称为谷歌地图自动完成api) 当用户停止键入时如何调用api?(未关闭键盘或已保存) 我会创建,它会延迟所选计时器执行代码 例如,用户输入“123”-执行将延迟200ms,用户输入“4”,取消最后一次执行,并创建另一个延迟。如果用户在200毫秒内未输入新数据,则将执行自动完成替换(“1234”)Flutter 如何捕获textField小部件上的快速键入?,flutter,dart,Flutter,Dart,这种方式在每次输入更改时调用。问题是,当用户输入的速度很快,每次都调用api,搜索结果总是在变化。(称为谷歌地图自动完成api) 当用户停止键入时如何调用api?(未关闭键盘或已保存) 我会创建,它会延迟所选计时器执行代码 例如,用户输入“123”-执行将延迟200ms,用户输入“4”,取消最后一次执行,并创建另一个延迟。如果用户在200毫秒内未输入新数据,则将执行自动完成替换(“1234”) import 'package:flutter/foundation.dart'; import 'd
import 'package:flutter/foundation.dart';
import 'dart:async';
class Debouncer {
final int milliseconds;
VoidCallback action;
Timer _timer;
Debouncer({ this.milliseconds });
run(VoidCallback action) {
if (_timer != null) {
_timer.cancel();
}
_timer = Timer(Duration(milliseconds: milliseconds), action);
}
}
使用来自的
debounce()
transform运算符我认为更好的方法是取消以前的任何API调用,而不是依赖用户停止键入。您是否使用此函数进行搜索?@Salma.yes…..没有必要重新发明轮子:这不是重新发明轮子。它只是简单地使用计时器而不是流,在这种情况下,Stream
s很可能是最好的遵循方式-我敢打赌,对于搜索OP,它使用某种异步方法返回Future
,因此这是Stream.asyncMap
method@pskink你能举个例子吗Stream.asyncMap
?@BloodLoss有一些示例如何通过rxDart lib使用streams实现:@pskink,但我也很好奇你所说的Stream.asyncMap
:o
import 'package:flutter/foundation.dart';
import 'dart:async';
class Debouncer {
final int milliseconds;
VoidCallback action;
Timer _timer;
Debouncer({ this.milliseconds });
run(VoidCallback action) {
if (_timer != null) {
_timer.cancel();
}
_timer = Timer(Duration(milliseconds: milliseconds), action);
}
}
final _debouncer = Debouncer(milliseconds: 200);
onTextChange(String text) {
_debouncer.run(() => _autocompletePlace(value));
}