Начнем с того, как понять, открыта ли клавиатура. Тут есть несколько методов — через
MediaQuery, через WidgetBindings и через библиотеки.MediaQuery
final bottomInset = MediaQuery.of(context).viewInsets.bottom;
if (bottomInset == 0) {
// клавиатура закрыта
} else {
// клавиатура открыта
}У этого способа есть большой минус — он не работает на комплексной верстке, а наши приложения чаще всего такие.
WidgetBindings
Второй способ сложнее, но надежнее. Сначала мы должны добавить к нашему классу WidgetBindingsObserver.
class _MyWidgetState extends State<MyWidget> with WidgetBindingsObserver {
...
}Далее подключаем все:
@override
void initState() {
super.initState();
WidgetBindings.addObserver(this);
}
@override
void dispose() {
WidgetBindings.removeObserver(this);
super.dispose();
}
@override
didChangeMetrics() {
super.didChangeMetrics();
final isKeyboardOpen = WidgetsBinding.instance.window.viewInsets.bottom > 0;
}Но и этот метод не идеален, так как не сможем получить высоту клавиатуры, если это необходимо.
Библиотеки
Тут достаточно большой выбор таких библиотек. Но наш совет — выбирать те, у которых много скачиваний, они чаще работают.
Во второй части мы расскажем, зачем это нужно и какие библиотеки выбрали мы. Делитесь в чате, были ли у вас случаи, когда нужно было отслеживать клавиатуру?
