flutter - 如何在 textField 小部件上快速输入?
问题描述
每次输入更改时都会调用这种方式。问题是当用户快速输入时,每次调用 api 并且搜索结果总是在变化。(称为谷歌地图自动完成API)
用户停止输入时如何调用api?(不关闭键盘或onSaved)
TextField(
decoration: _inputStyle(),
cursorColor: Palette.defaultColor,
controller: _textEditingController,
onChanged: (value) => setState(() => _autocompletePlace(value)),
)
解决方案
我会创建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));
}
推荐阅读
- google-bigquery - 为什么 BigQuery BI 引擎不使用所有预留?
- asp.net-mvc - 当我尝试在可能的主视图中渲染部分视图时遇到问题
- javascript - 切换不会保持打开状态
- ruby-on-rails - How to stub rails warden spec and return 401
- node.js - How to catch a download with playwright?
- c# - Why a value of type Datetime becomes '01/01/0001 00:00:00' when received?
- javascript - JavaScript source tag attributes
- javascript - Material.io web: Toggle TextField error state
- python - How to determine several minimum in a list?
- javascript - 是否可以在 GraphQL 的 Apollo 客户端中查询“小于”?