Как убрать фокус из `FocusNode` в поле текста (формы) во флаттере - PullRequest
1 голос
/ 15 апреля 2020

В TextFormField вы можете запросить фокусировку, используя FocusScope.of(context).requestFocus(_focusNode). Тем не менее, как вы можете убедиться, что один и тот же узел фокусировки был не сфокусирован?

Например, в моем рабочем процессе я хочу, чтобы hintText изначально было X, Y когда фокусировано, и go обратно в Х, когда не сфокусировано. Но, если я использую что-то обычное, например то, что показано ниже, я не могу go вернуться к X.

class TextFormFieldErrorOnLabel extends StatefulWidget {
  final String hintText;
  final String hintTextOnFocus;

  const NewTextFormField({
    this.hintText,
    this.hintTextOnFocus,
  }) : super(key: key);

  @override
  _NewTextFormFieldState createState() => _NewTextFormFieldState();
}

class _NewTextFormFieldState {
  final FocusNode _focusNode = FocusNode();

  void _requestFocus() {
    setState(() {
      FocusScope.of(context).requestFocus(_focusNode);
    });
  }

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      onTap: _requestFocus,
      focusNode: _focusNode,
      decoration: InputDecoration(
        hintText: _focusNode.hasFocus ? widget.hintTextOnFocus : widget.hintText,
      )
    );
  }
}

Есть ли где-нибудь метод "requestUnfocus"? Если так, то как бы я назвал это из TextFormField?

1 Ответ

0 голосов
/ 16 апреля 2020

Я не знаю, является ли это лучшей практикой, но я звоню

FocusScope.of(context).requestFocus(null);

, чтобы убедиться, что ни один узел не выбран.

...