Что делает FocusScope.of(context).requestFocus(FocusNode()); значит во флаттере?

Я новичок во флаттере и нечего было объяснять что
FocusScope.of(context).requestFocus(FocusNode());

на самом деле делает. Я просмотрел документацию Flutter, но не смог точно понять, что это значит.

Кто-нибудь может мне это объяснить?

Каждая деталь поможет. Благодарю вас.


person Suraj M    schedule 24.03.2021    source источник


Ответы (1)


То, что вы нашли, — это устаревший способ скрыть клавиатуру в старых версиях 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