Управление видимостью плавающей кнопки действия Flutter (FAB) при открытии клавиатуры

При разработке приложений Flutter плавающая кнопка действия (FAB) — это популярный компонент пользовательского интерфейса, используемый для обеспечения быстрого доступа к основным действиям в приложении. Однако когда клавиатура открывается, она иногда может закрывать FAB, что усложняет работу пользователя. В этой статье мы рассмотрим различные методы управления видимостью FAB при открытой клавиатуре, а также приведем примеры кода.

Метод 1: использование пакета flutter_keyboard_visibility
Пакет flutter_keyboard_visibilityпредоставляет удобный способ определения видимости клавиатуры. Отслеживая состояние видимости клавиатуры, мы можем динамически обновлять положение FAB.

Сначала добавьте пакет в файл pubspec.yaml:

dependencies:
  flutter_keyboard_visibility: ^x.x.x

Затем импортируйте пакет в файл Dart:

import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';

Затем инициализируйте KeyboardVisibilityController:

final KeyboardVisibilityController _keyboardVisibilityController = KeyboardVisibilityController();

Наконец, обновите видимость FAB в зависимости от состояния клавиатуры:

Visibility(
  visible: !_keyboardVisibilityController.isVisible,
  child: FloatingActionButton(
    onPressed: () {
      // FAB's action
    },
    child: Icon(Icons.add),
  ),
)

Метод 2: использование виджета Stack.
В этом методе мы используем виджет Stack, чтобы расположить FAB над клавиатурой. Используя комбинацию MediaQueryи AnimatedContainer, мы можем плавно анимировать положение FAB.

Stack(
  children: [
    // Other widgets
    AnimatedContainer(
      duration: Duration(milliseconds: 300),
      margin: EdgeInsets.only(
        bottom: MediaQuery.of(context).viewInsets.bottom,
      ),
      child: FloatingActionButton(
        onPressed: () {
          // FAB's action
        },
        child: Icon(Icons.add),
      ),
    ),
  ],
)

Метод 3: использование пакета flutter_keyboard_size
Пакет flutter_keyboard_sizeобеспечивает более продвинутый подход, предоставляя размер и положение клавиатуры. Это позволяет точно контролировать видимость FAB.

Сначала добавьте пакет в файл pubspec.yaml:

dependencies:
  flutter_keyboard_size: ^x.x.x

Затем импортируйте пакет в файл Dart:

import 'package:flutter_keyboard_size/flutter_keyboard_size.dart';

Затем оберните свое приложение виджетом KeyboardSizeProvider:

KeyboardSizeProvider(
  child: MaterialApp(
    // App configuration
  ),
)

Наконец, обновите видимость FAB в зависимости от размера клавиатуры:

KeyboardSizeBuilder(
  builder: (context, keyboard) {
    final bool isKeyboardVisible = keyboard.visibleHeight > 0;
    return Visibility(
      visible: !isKeyboardVisible,
      child: FloatingActionButton(
        onPressed: () {
          // FAB's action
        },
        child: Icon(Icons.add),
      ),
    );
  },
)

Реализуя любой из этих методов, вы можете гарантировать, что FAB в вашем приложении Flutter останется видимым, даже когда клавиатура открыта. Независимо от того, решите ли вы использовать пакет или использовать встроенные виджеты Flutter, обеспечение бесперебойного взаимодействия с пользователем имеет важное значение для любого мобильного приложения.