搜尋套件、儲存庫與 APP 分類

套件詳情v7.0.1

flutter_keyboard_visibility

用於在 Android 和 iOS 上發現軟鍵盤可見性狀態的 Flutter 插件。

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
76.5萬
喜歡數
1160
Pub 分數
160

安裝套件

flutter pub add flutter_keyboard_visibility

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

一個 Flutter 插件,可偵測 Android、iOS 及其他支援平台上的軟鍵盤可見狀態。它在鍵盤出現或消失時提供即時更新,讓開發者能夠動態調整 UI 排版。適用於表單、聊天介面以及任何需要根據鍵盤存在情況進行響應式設計的應用。此外,該插件可在行動與桌面平台運作,確保行為一致。它能與 Flutter 的狀態管理系統無縫整合。

適用情境

  • 動態表單佈局調整
  • 聊天介面響應性
  • 自動滾動到聚焦欄位
  • 鍵盤輸入時的響應式介面
  • 跨平台鍵盤檢測

主要特色

  • 即時鍵盤可見性事件
  • 支援 Android、iOS、Web、macOS、Windows 和 Linux
  • 簡單的串流式 API
  • 適用於所有 Flutter 狀態管理方法
  • 輕便可靠

適合對象

  • 動態 UI 版面配置的應用程式
  • 表單密集型應用
  • 聊天或訊息應用
  • 針對多平台的開發者
  • UI/UX 優化團隊

使用建議

  • 需要正確處理流訂閱
  • 可能需要額外的邏輯來處理複雜佈局
  • 不適用於非互動式使用者介面元件
  • 受限於鍵盤可見性,無法切換輸入法
  • 與串流中的適當錯誤處理一起使用效果最佳

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

Flutter Keyboard Visibility

pub package ci codecov

React to keyboard visibility changes.

Note about Flutter Web and Desktop support

Web support is an open issue here, desktop support is an open issue here. Currently this library will just return false for keyboard visibility on web and desktop.

Install

Install the package

Usage: React to Keyboard Visibility Changes

Option 1: Within your Widget tree using a builder

Build your Widget tree based on whether or not the keyboard is visible by using KeyboardVisibilityBuilder.

import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';

/// In any of your widgets...
@override
Widget build(BuildContext context) {
  return KeyboardVisibilityBuilder(
      builder: (context, isKeyboardVisible) {
        return Text(
          'The keyboard is: ${isKeyboardVisible ? 'VISIBLE' : 'NOT VISIBLE'}',
        );
      }
  );
Option 2: Within your Widget tree using a provider

Build your Widget tree based on whether or not the keyboard is visible by including a KeyboardVisibilityProvider near the top of your tree.

import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';

// Somewhere near the top of your tree...
@override
Widget build(BuildContext context) {
  return KeyboardVisibilityProvider(
    child: MyDemoPage(),
  );
}

// Within MyDemoPage...
@override
Widget build(BuildContext context) {
  final bool isKeyboardVisible = KeyboardVisibilityProvider.isKeyboardVisible(context);
  return Text(
    'The keyboard is: ${isKeyboardVisible ? 'VISIBLE' : 'NOT VISIBLE'}',
  );
}
Option 3: Direct query and subscription

Query and/or subscribe to keyboard visibility directly with the KeyboardVisibilityController class.

import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'dart:async';

late StreamSubscription<bool> keyboardSubscription;

@override
void initState() {
  super.initState();

  var keyboardVisibilityController = KeyboardVisibilityController();
  // Query
  print('Keyboard visibility direct query: ${keyboardVisibilityController.isVisible}');

  // Subscribe
  keyboardSubscription = keyboardVisibilityController.onChange.listen((bool visible) {
    print('Keyboard visibility update. Is visible: $visible');
  });
}

@override
void dispose() {
  keyboardSubscription.cancel();
  super.dispose();
}

Usage: Dismiss keyboard on tap

Place a KeyboardDismissOnTap near the top of your Widget tree. When a user taps outside of the currently focused Widget, the Widget will drop focus and the keyboard will be dismissed.

import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';

// Somewhere near the top of your tree...
@override
Widget build(BuildContext context) {
  return KeyboardDismissOnTap(
    child: MyDemoPage(),
  );
}

By default KeyboardDismissOnTap will only dismiss taps not captured by other interactive Widgets, like buttons. If you would like to dismiss the keyboard for any tap, including taps on interactive Widgets, set dismissOnCapturedTaps to true.

import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';

// Somewhere near the top of your tree...
@override
Widget build(BuildContext context) {
  return KeyboardDismissOnTap(
    dismissOnCapturedTaps: true,
    child: MyDemoPage(),
  );
}

The IgnoreKeyboardDismiss Widget can be used to further refine which taps do and do not dismiss the keyboard. Checkout the example app for more detail.

Testing

Testing using mocks

KeyboardVisibilityProvider and KeyboardVisibilityBuilder accept a controller parameter that allow you to mock or replace the logic for reporting keyboard visibility updates.

@GenerateMocks([KeyboardVisibilityController])
void main() {
  testWidgets('It reports true when the keyboard is visible', (WidgetTester tester) async {
    // Pretend that the keyboard is visible.
    var mockController = MockKeyboardVisibilityController();
    when(mockController.onChange)
        .thenAnswer((_) => Stream.fromIterable([true]));
    when(mockController.isVisible).thenAnswer((_) => true);

    // Build a Widget tree and query KeyboardVisibilityProvider
    // for the visibility of the keyboard.
    bool? isKeyboardVisible;

    await tester.pumpWidget(
      KeyboardVisibilityProvider(
        controller: mockController,
        child: Builder(
          builder: (BuildContext context) {
            isKeyboardVisible =
                KeyboardVisibilityProvider.isKeyboardVisible(context);
            return SizedBox();
          },
        ),
      ),
    );

    // Verify that KeyboardVisibilityProvider reported that the
    // keyboard is visible.
    expect(isKeyboardVisible, true);
  });
}
Testing with a global override

Call KeyboardVisibilityTesting.setVisibilityForTesting(false); to set a custom value to use during flutter test. This is set globally and will override the standard logic of the native platform.

void main() {
  testWidgets('My Test', (WidgetTester tester) async {
    KeyboardVisibilityTesting.setVisibilityForTesting(true);
    await tester.pumpWidget(MyApp());
  });
}

所屬分類

依賴

依賴清單 6 項

  • flutter_keyboard_visibility_linux^2.0.0
  • flutter_keyboard_visibility_macos^2.0.0
  • flutter_keyboard_visibility_platform_interface^3.0.0
  • flutter_keyboard_visibility_web^3.0.0
  • flutter_keyboard_visibility_windows^2.0.0
  • meta^1.18.0

原始碼儲存庫

使用此套件的專案

所在榜單