如何解决Flutter:如何检测在 TextField 上按下了删除键
我正在开发一个 Flutter 应用程序,用户可以在该应用程序中在文本字段中输入文本,然后从从 DB 搜索的服务器数据库中应用搜索。问题是,当我进一步输入时,API 调用正在发生,但即使我按下返回键,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 上。
请参考this链接,祝你好运!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。