Случаи, когда нам нужно отслеживать
1. Если мы работаем с виджетом, который плохо складывается. Например, платформенные виджеты. В одном из наших кейсов на WebView располагалось текстовое поле, которое на Android начало уходить под клавиатуру. В этом случае мы использовали отслеживание для добавления отступов, что помогло справиться с проблемой.
2. Чтобы выводить дополнительные виджеты сразу над клавиатурой, если она открыта. Например, список emoji или что-то подобное. А также менять что-либо на экране, если нам нужно.
3. Это может быть одним из способов отслеживания, пишет ли пользователь что-то в чат. Все же видели надписи «печатает…» в мессенджерах.
Как мы получили высоту клавиатуры
Так как у нас не получилось сжимать WebView автоматически, мы решили прибегнуть к отслеживанию. Попробовав способы из первой части, мы поняли, что они нам не подходят. Поэтому долго выбирали библиотеку, которая подойдет. Вот несколько:
keyboard_height_plugin — позволяет отслеживать не только, открыта ли клавиатура, но и ее высоту. Именно эту библиотеку мы выбрали в итоге.
flutter_keyboard_visibility — самая популярная библиотека, но достаточно сложная в подключении.
Именно эти 2 пакета мы можем порекомендовать к использованию в своих проектах.
Теперь давайте посмотрим, как мы организовали отслеживание. Наш виджет уже и так был
Stateful, поэтому работ проводилось немного. Сначала мы добавили объект из библиотеки и создали переменную под размер самой клавиатуры:final _keyboardHeightPlugin = KeyboardHeightPlugin();
double _keyboardHeight = 0;И в методе
initState подписались на изменения через callback:_keyboardHeightPlugin.onKeyboardHeightChanged((double height) {
setState(() {
_keyboardHeight = height;
});
});Не забываем, что сам объект нужно разрушить вместе с виджетом, поэтому добавляем в
dispose вот такой вызов:_keyboardHeightPlugin.dispose();Теперь можно применить новую переменную для отступа.
Делитесь в чате, были ли у вас похожие случаи?
