如何在textField小部件上捕捉快速键入?

时间:2019-11-29 09:55:18

标签: flutter dart

这种方法在每次输入更改时都会调用。问题是当用户快速键入时,每次都调用api,并且搜索结果总是在变化。 (称为Google Map autoComplete API)

用户停止键入时如何调用api? (不关闭键盘或onSaved)

TextField(
      decoration: _inputStyle(),
      cursorColor: Palette.defaultColor,
      controller: _textEditingController,
     onChanged: (value) => setState(() => _autocompletePlace(value)),
 )

1 个答案:

答案 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));
}