Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev0.8.1

keyboard_detection

Um plugin Flutter para detectar facilmente a visibilidade do teclado usando o preenchimento inferior da visualização.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
16,2 mil
Curtidas
29
Pontos Pub
160

Instalar pacote

flutter pub add keyboard_detection

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

O pacote keyboard_detection é um plugin do Flutter que simplifica a detecção da visibilidade do teclado monitorando o preenchimento inferior da tela. Ele fornece uma maneira confiável de determinar quando o teclado aparece ou desaparece em várias plataformas, incluindo Android, iOS, Web, macOS, Windows e Linux. Isso ajuda os desenvolvedores a ajustarem dinamicamente os layouts da interface para uma melhor experiência do usuário durante as interações de entrada. O plugin se integra perfeitamente a aplicativos Flutter existentes e requer configuração mínima. É particularmente útil em formulários, interfaces de chat e qualquer cenário onde ajustes de layout responsivo sejam necessários com base no estado do teclado.

Casos de uso

  • Ajuste dinâmico de layout de formulário
  • Responsividade da interface de chat
  • Gerenciamento de foco de campo de entrada
  • Interface do usuário responsiva para dispositivos móveis e desktop
  • Gerenciamento de sobreposição do teclado
  • Rolagem automática para campos focados

Principais recursos

  • Detecta a visibilidade do teclado por meio do preenchimento inferior da vista
  • Suporte multiplataforma (Android, iOS, Web, macOS, Windows, Linux)
  • Integração simples da API
  • Atualizações em tempo real do estado do teclado
  • Configuração mínima necessária
  • Funciona com teclados físicos e de tela

Indicado para

  • Desenvolvedores Flutter construindo aplicativos intensivos em entrada
  • Aplicativos que exigem layouts de interface adaptáveis
  • Desenvolvedores direcionados para múltiplas plataformas
  • Projetos com interfaces de formulário ou bate-papo dinâmicos
  • Equipes que buscam detecção leve de teclado

Considerações

  • Pode exigir manipulação adicional para visualizações de rolagem aninhadas complexas
  • Não adequado para detectar diretamente a altura do teclado
  • O comportamento pode variar ligeiramente entre diferentes implementações de plataforma
  • Melhor usado com estruturas de layout como Scaffold ou similares
  • Limitado à visibilidade do teclado; não detecta o tipo ou idioma do teclado

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

Keyboard Detection

Easily detect keyboard visibility in your Flutter app with this plugin. It leverages the resizing of the bottom view inset to determine keyboard visibility, ensuring a native Flutter experience.

Introduction

Keyboard Detection Plugin

Features

  • Detect keyboard visibility changes (unknown, visibling, visible, hiding, hidden).
  • Access keyboard visibility state as an enum or boolean.
  • Listen to keyboard visibility changes via callbacks or streams.
  • Retrieve keyboard size when it is fully loaded.

Simple Usage

Wrap your Scaffold with KeyboardDetection and listen to the onChanged value:

@override
Widget build(BuildContext context) {
  return MaterialApp(
    home: KeyboardDetection(
      controller: KeyboardDetectionController(
        onChanged: (value) {
          print('Keyboard visibility changed: $value');
          setState(() {
            keyboardState = value;
            stateAsBool = keyboardDetectionController.stateAsBool();
            stateAsBoolWithParamTrue =
                keyboardDetectionController.stateAsBool(true);
          });
        },
      ),
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Keyboard Detection'),
        ),
        body: Center(
          child: Column(
            children: [
              Text('State: $keyboardState'),
              Text('State as bool (includeTransitionalState = false): $stateAsBool'),
              Text('State as bool (includeTransitionalState = true): $stateAsBoolWithParamTrue'),
              const TextField(),
            ],
          ),
        ),
      ),
    ),
  );
}

The onChanged callback returns a KeyboardState enum (unknown, visibling, visible, hiding, hidden).

Advanced Usage with Controller

Declare the KeyboardDetectionController outside the build method for more control:

late KeyboardDetectionController keyboardDetectionController;

@override
void initState() {
  keyboardDetectionController = KeyboardDetectionController(
    onChanged: (value) {
      print('Keyboard visibility changed: $value');
      keyboardState = value;
    },
  );

  // Listen to the stream
  _sub = keyboardDetectionController.stream.listen((state) {
    print('Stream update: $state');
  });

  // Add one-time callback
  keyboardDetectionController.addCallback((state) {
    print('One-time callback: $state');
    return false;
  });

  // Add looped callback
  keyboardDetectionController.addCallback((state) {
    print('Looped callback: $state');
    return true;
  });

  // Add looped future callback
  keyboardDetectionController.addCallback((state) async {
    await Future.delayed(const Duration(milliseconds: 100));
    print('Looped future callback: $state');
    return true;
  });

  super.initState();
}

Use the controller in the build method:

@override
Widget build(BuildContext context) {
  return KeyboardDetection(
    controller: keyboardDetectionController,
    child: Scaffold(
      appBar: AppBar(
        title: const Text('Keyboard Detection'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(12.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('State: ${keyboardDetectionController.state}'),
              FutureBuilder(
                future: keyboardDetectionController.ensureSizeLoaded,
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    return Text('Keyboard size loaded: ${keyboardDetectionController.size}');
                  }
                  return const Text('Loading keyboard size...');
                },
              ),
              const TextField(),
              ElevatedButton(
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (_) => const MyApp()),
                  );
                },
                child: const Text('Navigate to another page'),
              ),
              ElevatedButton(
                onPressed: () {
                  Navigator.pushAndRemoveUntil(
                    context,
                    MaterialPageRoute(
                      builder: (_) => const MyApp(),
                    ),
                    (_) => false,
                  );
                },
                child: const Text('Move to another page'),
              ),
            ],
          ),
        ),
      ),
    ),
  );
}
Controller Methods
  • keyboardDetectionController.state: Get the current keyboard visibility state as a KeyboardState enum.
  • keyboardDetectionController.stateAsBool([bool includeTransitionalState = false]): Get the keyboard visibility as a bool?. If includeTransitionalState is true, transitional states (visibling, hiding) are included.
  • keyboardDetectionController.addCallback(callback): Add a callback for state changes. Return true for repeated calls, false to stop.
  • keyboardDetectionController.stream: Listen to keyboard visibility changes as a stream.
  • keyboardDetectionController.size: Get the keyboard size. Use keyboardDetectionController.ensureSizeLoaded to ensure the size is loaded.

Limitations

  • This package uses the bottom inset to detect keyboard visibility, so it doesn't work with floating keyboards (Issue #1).

Contributions

Contributions and feedback are welcome! Feel free to open issues or submit pull requests.

Categorias

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.