Метод 1: использование класса FocusScope
Класс FocusScopeво Flutter предоставляет механизм управления состоянием фокуса виджетов. Чтобы отключить клавиатуру при нажатии на текстовое поле, мы можем обернуть текстовое поле виджетом FocusScopeи добавить к нему FocusNode. Вот пример:
FocusNode _focusNode = FocusNode();
Widget build(BuildContext context) {
return FocusScope(
node: FocusScopeNode(),
child: TextField(
focusNode: _focusNode,
onTap: () {
_focusNode.unfocus();
},
// Other TextField properties...
),
);
}
Метод 2: использование виджета GestureDetector
Другой подход — использовать виджет GestureDetectorдля регистрации событий касания текстового поля и соответствующего отключения клавиатуры. Вот пример:
TextField(
onTap: () {
FocusManager.instance.primaryFocus?.unfocus();
},
// Other TextField properties...
),
Метод 3: расширение виджета TextField
Если вам часто нужна эта функция, вы можете создать собственный виджет TextField, который автоматически отключает клавиатуру при нажатии. Вот пример того, как этого можно добиться:
class DismissKeyboardTextField extends TextField {
DismissKeyboardTextField({
Key? key,
TextEditingController? controller,
TextInputType? keyboardType,
TextInputAction? textInputAction,
// Other TextField properties...
}) : super(
key: key,
controller: controller,
keyboardType: keyboardType,
textInputAction: textInputAction,
onTap: () {
FocusManager.instance.primaryFocus?.unfocus();
},
// Other TextField properties...
);
}
Метод 4: реализация пользовательского виджета FormField
Если вы используете виджет Formво Flutter, вы можете создать собственный виджет FormField, который автоматически закрывает клавиатуру при нажатии. Этот подход особенно полезен, когда в форме имеется несколько текстовых полей. Вот пример:
class DismissKeyboardFormField extends FormField<String> {
DismissKeyboardFormField({
Key? key,
TextEditingController? controller,
TextInputType? keyboardType,
TextInputAction? textInputAction,
// Other FormField properties...
}) : super(
key: key,
initialValue: controller?.text,
builder: (FormFieldState<String> field) {
final InputDecoration effectiveDecoration = (decoration ?? const InputDecoration())
.applyDefaults(Theme.of(field.context).inputDecorationTheme);
return TextField(
controller: controller,
keyboardType: keyboardType,
textInputAction: textInputAction,
onTap: () {
FocusManager.instance.primaryFocus?.unfocus();
field.requestFocus();
},
// Other TextField properties...
);
},
);
}
Включение любого из этих методов в ваше приложение Flutter позволит вам легко отключать клавиатуру, когда пользователь взаимодействует с текстовым полем, обеспечивая более плавное взаимодействие с пользователем.