На некоторых устройства на android, есть функция сворачивания клавиатуры.
Особенность этой функции в том, что клавиатура-то сворачивается, а вот фокус из поля ввода не пропадает. Из-за этого получалось, что у меня в приложение дневник достижений поле ввода продолжало показываться под блоком рекламы, и кликнуть по нему было уже проблематично.
Стандартными методами flutter я не нашёл способа отлова минимизации клавиатуры.
Зато нашёл небольшой плагин, который позволяет отловить скрыта ли клавиатура или нет.
Плагин называется flutter_keyboard_visibility
Сначала устанавливаем плагин, добавляя его в список dependencies
в файле pubspec.yaml
dependencies:
flutter_keyboard_visibility: ^4.0.0
После этого можно начать отлавливать отображаемость клавиатуры несколькими способами
- Виджет-обёртка
// Подключаем плагин
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
// В функции создания виджета делаем обёртку из виджета KeyboardVisibilityBuilder
// в котором есть переменная isKeyboardVisible, относительно которой отрисовываем контент
@override
Widget build(BuildContext context) {
return KeyboardVisibilityBuilder(
builder: (context, isKeyboardVisible) {
return Text(
'Клавиатура : ${isKeyboardVisible ? 'Отображается' : 'Скрыта'}',
);
}
);
- Через провайдера
// Подключаем плагин
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
// Родительский класс
@override
Widget build(BuildContext context) {
return KeyboardVisibilityProvider(
child: MyDemoPage(),
);
}
// Внутри класса MyDemoPage
@override
Widget build(BuildContext context) {
final bool isKeyboardVisible = KeyboardVisibilityProvider.isKeyboardVisible(context);
return Text(
'Клавиатура : ${isKeyboardVisible ? 'Отображается' : 'Скрыта'}',
);
}
- И третий - через прослушивание событий
// Подключаем плагин
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
@override
void initState() {
super.initState();
// Создаём контроллер для прослушивания
var keyboardVisibilityController = KeyboardVisibilityController();
// Это пример, как запросить текущий статус клавиатуры
print('Статус отображения клавиатуры в данный момент: ${keyboardVisibilityController.isVisible}');
// Подписка на прослушивание событий
keyboardVisibilityController.onChange.listen((bool visible) {
print('Статус клавиатуры обновился. Теперь он: ${visible}');
});
}
В моём случае мне подошёл третий способ. Я смог в момент скрытия клавиатуры назначать новоё состояние своему приложению, а именно отключение режима добавления.
Вот так я смог решить проблему и выпустить обновление приложения, решающие эту досаждающую неприятность.
@override
void initState() {
var keyboardVisibilityController = KeyboardVisibilityController();
keyboardVisibilityController.onChange.listen((bool visible) {
if(!visible && adding){
this.setState(() {
adding = false;
});
}
});
}