Flutter:如何检测在 TextField 上按下了删除键

问题描述

我正在开发一个 Flutter 应用程序,用户可以在该应用程序中在文本字段中输入文本,然后从从 DB 搜索的服务器数据库中应用搜索。问题是,当我进一步输入时,API 调用正在发生,但即使我按下返回键,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链接,祝你好运!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...