Flutter:如何检测在 TextField 上按下删除键
Flutter: How to detect delete key is pressed on TextField
我正在开发一个 flutter 应用程序,用户可以在该应用程序的文本字段中输入文本,然后应用从数据库搜索的服务器数据库中的搜索。问题是当我进一步输入时 API 调用正在发生,但即使我按下后退键,API 调用仍在发生。
所以我希望当用户按下 return 键时没有 API 调用。
这是我的代码
TextField(
controller: searchTextController,
autofocus: true,
decoration: InputDecoration(
fillColor: colorWhite.withOpacity(0.20),
filled: true,
prefixIcon: Icon(Icons.search),
hintText: "Search Data...",
border: InputBorder.none,
hintStyle: TextStyle(color: Colors.white30),
),
onChanged: (value) {
updateSearchQuery(query);
},
style: TextStyle(color: Colors.white, fontSize: 16.0),
)
您可以全局声明一个变量;
var val = "";
然后在你的 onChanged 方法中;
onChanged: (value) {
if(!val.contains(value))
updateSearchQuery(query);
val = value;
},
你可以这样使用它。当 val 包含值(如“aabb”和“aab”)时,不要搜索。
如果我理解正确的话,你希望你的搜索功能在你的部分文本被删除时不被调用,而只在你的文本字段中添加内容时被调用
首先,定义这个
String val1 = "";
然后把你的 onChanged 改成这样
onChanged: (String value) {
if (!value.contains(val1)) {
print("no search");
}else{
updateSearchQuery(query);
print("search");
}
val1 = value;
},
最好的解决方案是用 RawKeyboardListener 包装您的 TextField,如下所示:
RawKeyboardListener(
focusNode: _focusNode, // or FocusNode()
onKey: (event){
if (event.logicalKey == LogicalKeyboardKey.backspace) {
// here you can check if textfield is focused
print('backspace clicked');
}
},
child: TextField()
)
您可以将任何小部件放在 RawKeyboardListener 中,而不是放在 TextField 中。
请参考thislink,祝你好运!
我正在开发一个 flutter 应用程序,用户可以在该应用程序的文本字段中输入文本,然后应用从数据库搜索的服务器数据库中的搜索。问题是当我进一步输入时 API 调用正在发生,但即使我按下后退键,API 调用仍在发生。
所以我希望当用户按下 return 键时没有 API 调用。
这是我的代码
TextField(
controller: searchTextController,
autofocus: true,
decoration: InputDecoration(
fillColor: colorWhite.withOpacity(0.20),
filled: true,
prefixIcon: Icon(Icons.search),
hintText: "Search Data...",
border: InputBorder.none,
hintStyle: TextStyle(color: Colors.white30),
),
onChanged: (value) {
updateSearchQuery(query);
},
style: TextStyle(color: Colors.white, fontSize: 16.0),
)
您可以全局声明一个变量;
var val = "";
然后在你的 onChanged 方法中;
onChanged: (value) {
if(!val.contains(value))
updateSearchQuery(query);
val = value;
},
你可以这样使用它。当 val 包含值(如“aabb”和“aab”)时,不要搜索。
如果我理解正确的话,你希望你的搜索功能在你的部分文本被删除时不被调用,而只在你的文本字段中添加内容时被调用
首先,定义这个
String val1 = "";
然后把你的 onChanged 改成这样
onChanged: (String value) {
if (!value.contains(val1)) {
print("no search");
}else{
updateSearchQuery(query);
print("search");
}
val1 = value;
},
最好的解决方案是用 RawKeyboardListener 包装您的 TextField,如下所示:
RawKeyboardListener(
focusNode: _focusNode, // or FocusNode()
onKey: (event){
if (event.logicalKey == LogicalKeyboardKey.backspace) {
// here you can check if textfield is focused
print('backspace clicked');
}
},
child: TextField()
)
您可以将任何小部件放在 RawKeyboardListener 中,而不是放在 TextField 中。
请参考thislink,祝你好运!