Как использовать событие onKeyUp в TextField во флаттере

Я использую флаттер, чтобы сделать простое приложение. В приведенном ниже коде, когда событие изменения TextBox запускается, я вызываю метод с именем updateTitle().

Но я должен вызывать тот же метод updateTitle(), когда ключ поднят, как мы используем в javascript и других языках.

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

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 = true;
            }
        }
    }
Другие вопросы по тегам