如何检测用户已停止在 TextField 中输入?
How to detect user has stopped typing in TextField?
我正在使用 TextField
,在 onChanged
函数下
我正在调用我的代码,但现在的问题是每次输入或删除新单词时代码都会执行。
我正在寻找的是如何识别用户何时停止输入。
意味着添加一些延迟或类似的东西。
我尝试添加 delay
也使用 Future.delayed
函数,但该函数也被执行了 n 次。
TextField(
controller: textController,
onChanged: (val) {
if (textController.text.length > 3) {
Future.delayed(Duration(milliseconds: 450), () {
//code here
});
}
setState(() {});
},
)
感谢@pskink
我能够实现我正在寻找的功能。
在您的 pubspec.yaml
中导入 stream_transform 包
stream_transform: ^0.0.19
import 'package:stream_transform/stream_transform.dart';
StreamController<String> streamController = StreamController();
@override
void initState() {
streamController.stream
.transform(debounce(Duration(milliseconds: 400)))
.listen((s) => _validateValues());
super.initState();
}
//function I am using to perform some logic
_validateValues() {
if (textController.text.length > 3) {
// code here
}else{
// some other code here
}
}
TextField 代码
TextField(
controller: textController,
onChanged: (val) {
streamController.add(val);
},
)
在我的例子中,我还需要 flutter async。
//pubspec.yaml
stream_transform: ^2.0.0
import 'dart:async';
import 'package:stream_transform/stream_transform.dart';
StreamController<String> streamController = StreamController();
// In init function
streamController.stream
.debounce(Duration(seconds: 1))
.listen((s) => {
// your code
});
// In build function
TextField(
style: TextStyle(fontSize: 16),
controller: messageController,
onChanged: (val) {
myMetaRef.child("isTyping").set(true);
streamController.add(val);
},
)
我正在使用 TextField
,在 onChanged
函数下
我正在调用我的代码,但现在的问题是每次输入或删除新单词时代码都会执行。
我正在寻找的是如何识别用户何时停止输入。
意味着添加一些延迟或类似的东西。
我尝试添加 delay
也使用 Future.delayed
函数,但该函数也被执行了 n 次。
TextField(
controller: textController,
onChanged: (val) {
if (textController.text.length > 3) {
Future.delayed(Duration(milliseconds: 450), () {
//code here
});
}
setState(() {});
},
)
感谢@pskink
我能够实现我正在寻找的功能。
在您的 pubspec.yaml
stream_transform: ^0.0.19
import 'package:stream_transform/stream_transform.dart';
StreamController<String> streamController = StreamController();
@override
void initState() {
streamController.stream
.transform(debounce(Duration(milliseconds: 400)))
.listen((s) => _validateValues());
super.initState();
}
//function I am using to perform some logic
_validateValues() {
if (textController.text.length > 3) {
// code here
}else{
// some other code here
}
}
TextField 代码
TextField(
controller: textController,
onChanged: (val) {
streamController.add(val);
},
)
在我的例子中,我还需要 flutter async。
//pubspec.yaml
stream_transform: ^2.0.0
import 'dart:async';
import 'package:stream_transform/stream_transform.dart';
StreamController<String> streamController = StreamController();
// In init function
streamController.stream
.debounce(Duration(seconds: 1))
.listen((s) => {
// your code
});
// In build function
TextField(
style: TextStyle(fontSize: 16),
controller: messageController,
onChanged: (val) {
myMetaRef.child("isTyping").set(true);
streamController.add(val);
},
)