【问题标题】:How to use onKeyUp event in TextField in flutter如何在 Flutter 中使用 TextField 中的 onKeyUp 事件
【发布时间】:2019-02-05 13:07:26
【问题描述】:

我正在使用颤振制作一个简单的应用程序。 在下面的代码中,当触发 TextBox changed 事件时,我调用名为 updateTitle() 的方法。

但是我必须调用相同的方法 updateTitle(),当 key 启动时,就像我们在 javascript 和其他语言中使用的那样。

              TextField(
                controller: titleController,
                style: textStyle,
                onChanged: (value) => updateTitle(),
                decoration: InputDecoration(
                    labelText: "Title",
                    labelStyle: textStyle,
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(5.0),
                    )),
              ),

【问题讨论】:

  • “onkeyup”是什么意思?在移动设备上“onkeydown”和“onkeyup”没有多大意义......
  • @RicardoBRGWeb,目前,我正在使用 onChange 来启用我的按钮。如果 textField 不为空,我必须启用按钮。即如果有人,输入一些东西。
  • 但是每次用户在字段中输入新字符时都会触发 onchanged 事件,就像“onkeyup”一样。你需要监听这个事件,测试它是否不为空并启用按钮,使用 setstate 来改变它的状态。我会用代码发布答案。

标签: dart flutter flutter-layout


【解决方案1】:

对于您的用例,onChanged 就像 onkyeup 一样可以工作。每次用户在文本字段中点击一个新字符时,都会触发它。

为了启用/禁用按钮,您应该监听此事件,进行测试以查看该字段是否不为空,修改将处理按钮状态的变量,然后调用 setState()。

这只是一个示例代码。未经测试,但应该可以正常工作。

class _SoAnswerState extends State<SoAnswer> {

    bool _buttonActive = false;

    @override
    Widget build(BuildContext context) {

    ...

        TextField(
            controller: titleController,
            style: textStyle,
            onChanged: (value) => updateButtonState(value), // onChanged return the value of the field
            decoration: InputDecoration(
                labelText: "Title",
                labelStyle: textStyle,
                border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(5.0),
                )
            ),
        ),

    ...
    }

    void updateButtonState(String text){
        // if text field has a value and button is inactive
        if(text != null && text.length > 0 && !_buttonActive){
            setState(() {
                _buttonActive = true;
            }
        }else if((text == null || text.length == 0) && _buttonActive){
            setState(() {
                _buttonActive = false;
            }
        }
    }

编辑:添加有关事件的更多信息

在 JavaScript 中,onkeyup 事件处理程序在用户释放之前按下的键时触发。当用户在文本字段内按下并释放一个键时,文本字段的值会发生变化。 Flutter 中的 onChanged 侦听器在文本字段值更改时触发。当使用打字界面时,用户使用传统键盘,听文本字段的所有变化并不是一个好主意,因为用户可以按住一个键,导致应用程序重复 onchanged 事件太多次,每个字符重复一次。移动界面的情况并非如此,用户(通常)无法按住某个键。

【讨论】:

  • 你说得对。感谢您的回答。请告诉为什么 Onchange 和 onkeyup 在这里会起作用?
  • CondingbyRaj 我在答案中添加了一些关于事件的更多信息。
  • 谢谢@Ricardo BRGWeb,你的回答真的很有用。
猜你喜欢
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多