这种方法在每次输入更改时都会调用。问题是当用户快速键入时,每次都调用api,并且搜索结果总是在变化。 (称为Google Map autoComplete API)
用户停止键入时如何调用api? (不关闭键盘或onSaved)
TextField(
decoration: _inputStyle(),
cursorColor: Palette.defaultColor,
controller: _textEditingController,
onChanged: (value) => setState(() => _autocompletePlace(value)),
)
答案 0 :(得分:1)
我将创建Debouncer,它将通过选择的计时器来延迟代码的执行。
例如用户输入“ 123”-执行将延迟200毫秒,用户输入“ 4”,取消最后一次执行并创建另一个延迟。如果用户在200毫秒内未输入新数据,则将执行_autocompletePlace("1234")
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));
}