Pakete, Repositories und App-Kategorien suchen

Paketdetailsv7.0.1

flutter_keyboard_visibility

Flutter-Plugin zum Erkennen des Sichtbarkeitszustands der Soft-Tastatur unter Android und iOS.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
765.000
Likes
1160
Pub-Punkte
160

Paket installieren

flutter pub add flutter_keyboard_visibility

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Ein Flutter-Plugin, das den Sichtbarkeitszustand der Soft-Tastatur auf Android, iOS und anderen unterstützten Plattformen erkennt. Es bietet Echtzeit-Updates, wenn die Tastatur erscheint oder verschwindet, wodurch Entwickler die UI-Layouts dynamisch anpassen können. Ideal für Formulare, Chat-Oberflächen und alle Apps, die eine reaktive Gestaltung basierend auf der Anwesenheit der Tastatur erfordern. Das Plugin funktioniert über mobile und Desktop-Plattformen hinweg und gewährleistet konsistentes Verhalten. Es integriert sich nahtlos in Flutter's Zustandsverwaltungssysteme.

Anwendungsfälle

  • Dynamische Anpassung der Formularlayout
  • Reaktionsfähigkeit der Chat-Schnittstelle
  • Automatisches Scrollen zu fokussierten Feldern
  • Reaktive Benutzeroberfläche während der Tastatureingabe
  • Plattformübergreifende Tastaturerkennung

Hauptmerkmale

  • Echtzeit-Tastatur-Sichtbarkeitsereignisse
  • Unterstützt Android, iOS, Web, macOS, Windows und Linux
  • Einfache streambasierte API
  • Funktioniert mit allen Flutter-Zustandsverwaltungsansätzen
  • Leicht und zuverlässig

Geeignet für

  • Apps mit dynamischen UI-Layouts
  • Formular-lastige Anwendungen
  • Chat- oder Messaging-Apps
  • Entwickler, die mehrere Plattformen ansprechen
  • UI/UX-Optimierungsteams

Hinweise

  • Erfordert die ordnungsgemäße Behandlung von Stream-Abonnements
  • Möglicherweise ist zusätzliche Logik für komplexe Layouts erforderlich
  • Nicht geeignet für nicht-interaktive Benutzeroberflächenelemente
  • Beschränkt auf Tastatur sichtbarkeit, keine Eingabemethode wechseln
  • Am besten mit angemessener Fehlerbehandlung in Streams verwenden

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

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());
  });
}

Kategorien

Abhängigkeiten

Abhängigkeiten 6 Einträge

  • 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

Quell-Repository

Projekte, die dieses Paket verwenden

Ranglisten