Про web-разработку
Для программистов, фрилансеров, предпринимателей
Инструменты

Сворачивание клавиатуры на android во flutter

На некоторых устройства на android, есть функция сворачивания клавиатуры.

Особенность этой функции в том, что клавиатура-то сворачивается, а вот фокус из поля ввода не пропадает. Из-за этого получалось, что у меня в приложение дневник достижений поле ввода продолжало показываться под блоком рекламы, и кликнуть по нему было уже проблематично.

Стандартными методами flutter я не нашёл способа отлова минимизации клавиатуры.

Зато нашёл небольшой плагин, который позволяет отловить скрыта ли клавиатура или нет.

Плагин называется flutter_keyboard_visibility

Сначала устанавливаем плагин, добавляя его в список dependencies в файле pubspec.yaml

dependencies:
  flutter_keyboard_visibility: ^4.0.0

После этого можно начать отлавливать отображаемость клавиатуры несколькими способами

  1. Виджет-обёртка
// Подключаем плагин
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
// В функции создания виджета делаем обёртку из виджета KeyboardVisibilityBuilder
// в котором есть переменная isKeyboardVisible, относительно которой отрисовываем контент
@override
Widget build(BuildContext context) {
  return KeyboardVisibilityBuilder(
    builder: (context, isKeyboardVisible) {
      return Text(
        'Клавиатура : ${isKeyboardVisible ? 'Отображается' : 'Скрыта'}',
      );
    }
  );
  1. Через провайдера
// Подключаем плагин
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 ? 'Отображается' : 'Скрыта'}',
  );
}
  1. И третий - через прослушивание событий
// Подключаем плагин
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;
        });
      }
    });
}

Поделиться:

Сворачивание клавиатуры на android во flutter
Сворачивание клавиатуры на android во flutter