Одна из наиболее распространенных проблем с взаимодействием с пользователем (UX) в области мобильной разработки — это когда у вас есть поле ввода, и пользователь заканчивает печатать внутри него, и ему нужно закрыть клавиатуру, чтобы продолжить что-то еще, он/она может' не просто нажав кнопку ввода, вместо этого он вынужден нажать кнопку «Назад», и это работает против принципов UX, вам нужно использовать ваше приложение сделано с привычным поведением для пользователей, не заставляя их следовать вашим правилам, это повышает удобство использования вашего приложения.

вариант использования с Dart/Flutter

Если у вас есть TextFiled или любой другой ввод с такими украшениями:

когда пользователь нажимает на него и заканчивает печатать и хочет закрыть клавиатуру, он/она может сделать это, только нажав кнопку «Назад», и это поведение по умолчанию для TextFiled или любого ввода во Flutter или даже для родного Android или ios.

фрагмент кода

Решить проблему

чтобы решить проблему, мы должны сначала узнать, что является причиной этого.

у каждого TextFiled есть собственный Focus Node.

Focus Node: объект, который может использоваться виджетом с отслеживанием состояния для получения фокуса клавиатуры и обработки событий клавиатуры.

TextFiled запрашивает фокус. Когда вы нажимаете на него, а затем показываете клавиатуру, проблема, если вы нажмете на него, у него все еще есть фокус, поэтому нам нужно удалить с него фокусили назначить его другому виджету. Для этого вам нужно добавить функцию, которая запускается всякий раз, когда пользователь нажимает на Scaffold, потому что он представляет собой весь экран.

И чтобы добавить эту функцию, нам нужно обернуть Scaffold другим виджетом под названием Детектор жестов.

Детектор жестов: виджет, обнаруживающий жесты, пытается распознать жесты, соответствующие его ненулевым обратным вызовам.

Если у этого виджета есть дочерний элемент, он подчиняется этому дочернему элементу в отношении поведения размеров. Если у него нет потомка, он растет, чтобы соответствовать родителю.

Детектор жестовимеет множество полезных свойств, таких как свойство onTap, которое назначает ему функцию и запускается всякий раз, когда мы нажимаем на дочерний элемент детектора жестов(Scaffold), внутри этой функции нам нужно запросить фокус на другом FocusNode, чтобы взятьего из любого входного поля, и это делается с помощью Focus Scopeof наш контекст и запросФокус этого контекста на FocusNode другого виджета, но здесь мы не заинтересованы в назначении фокуса какому-либо другой виджет, поэтому мы просто передаем новый FocusNode,если вам нужно передать фокус другому виджету, вам нужно предварительно создать FocusNode и назначить его этому виджету.

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

фрагмент кода

Таким образом, вы можете отключить клавиатуру всякий раз, когда вы нажимаете на TextFiled.