【问题标题】:Flutter: How to detect delete key is pressed on TextFieldFlutter:如何检测在 TextField 上按下了删除键
【发布时间】:2021-04-26 13:49:33
【问题描述】:

我正在那里开发一个颤振应用程序,用户在文本字段中输入文本,然后应用从数据库搜索的服务器数据库中的搜索。问题是当我进一步输入时 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),
)

【问题讨论】:

    标签: flutter dart keyboard back detect


    【解决方案1】:

    最好的解决方案是用 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链接,祝你好运!

    【讨论】:

      【解决方案2】:

      你可以全局声明一个变量;

      var val = "";
      

      然后在你的 onChanged 方法中;

      onChanged: (value) {
          if(!val.contains(value))
           updateSearchQuery(query);
          val = value;
        },
      

      你可以这样使用它。当 val 包含值时(如“aabb”和“aab”)不要搜索。

      【讨论】:

        【解决方案3】:

        如果我理解正确,您希望您的搜索功能在您的部分文本被删除时不被调用,并且仅在您的文本字段中添加某些内容时调用

        首先,定义这个

          String val1 = "";
        

        然后将您的 onChanged 更改为类似的内容

        onChanged: (String value) {
                        if (!value.contains(val1)) {
                          print("no search");
                        }else{
                          updateSearchQuery(query);
                          print("search");
                        }
                        val1 = value;
                      },
        

        【讨论】:

          猜你喜欢
          • 2016-03-30
          • 2010-12-05
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          • 2021-04-04
          • 1970-01-01
          • 2011-10-07
          • 2011-06-22
          相关资源
          最近更新 更多