Flutter 如何捕获textField小部件上的快速键入?

Flutter 如何捕获textField小部件上的快速键入?,flutter,dart,Flutter,Dart,这种方式在每次输入更改时调用。问题是,当用户输入的速度很快,每次都调用api,搜索结果总是在变化。(称为谷歌地图自动完成api) 当用户停止键入时如何调用api?(未关闭键盘或已保存) 我会创建,它会延迟所选计时器执行代码 例如,用户输入“123”-执行将延迟200ms,用户输入“4”,取消最后一次执行,并创建另一个延迟。如果用户在200毫秒内未输入新数据,则将执行自动完成替换(“1234”) import 'package:flutter/foundation.dart'; import 'd

这种方式在每次输入更改时调用。问题是,当用户输入的速度很快,每次都调用api,搜索结果总是在变化。(称为谷歌地图自动完成api)

当用户停止键入时如何调用api?(未关闭键盘或已保存)

我会创建,它会延迟所选计时器执行代码

例如,用户输入“123”-执行将延迟200ms,用户输入“4”,取消最后一次执行,并创建另一个延迟。如果用户在200毫秒内未输入新数据,则将执行自动完成替换(“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);
  }
}

使用来自的
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));
}