То, что вы нашли, — это устаревший способ скрыть клавиатуру в старых версиях Flutter. Если вы хотите скрыть клавиатуру, используя современную версию, см. этот ответ: https://stackoverflow.com/a/56946311/11382675 а>
Вернемся к этому коду.
FocusScope
— это виджет, который автоматически создается для вас где-то вверху по дереву. Он поддерживает обход фокуса только для виджетов под ним в дереве. Без этого виджета в модальном диалоге вы могли бы переместить фокус на экран за ним.
FocusScope.of(context)
берет текущую позицию виджета в дереве (это то, чем является context
) и идет вверх по дереву, чтобы найти ближайший FocusScope
виджет.
Затем метод requestFocus
для найденного виджета FocusScope
заставляет фокус перемещаться на объект, который вы передаете.
Поскольку вы хотите ни на чем не фокусироваться (чтобы убрать клавиатуру), вы передаете только что созданный объект FocusNode
, который не связан ни с одним виджетом. Он одноразовый и впоследствии уничтожается.
FocusNode
объекты используются для установки фокуса на элементы управления вводом. Если вы создадите его и сохраните ссылку на него в своем State
, вы можете передать его виджету TextFormField
как focusNode: _myFocusNode
, а затем использовать его в качестве дескриптора, чтобы установить фокус на этом вводе.
person
Alexey Inkin
schedule
24.03.2021