es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ocultar la Barra de Navegación después de cerrar el teclado. Android 6.0.1. Flutter

El NavigationBar se abrió mientras se utiliza el teclado y luego no se cerró
Hicimos una aplicación de pantalla completa y funciona correctamente, pero cuando nos enfocamos en el widget TextField (abrir teclado) y luego lo cerramos, la NavigationBar no se oculta.
Versión de Android 6.0.1.
Hemos intentado:
1. Paquetes de visibilidad del teclado (todos).
2. Reiniciar (cada vez) la aplicación después de las llamadas del teclado.
3. Llamar a métodos de diferentes paquetes de pantalla completa.
4. Cambiar AndroidManifest:

  • android:windowSoftInputMode
  • android:theme

No podemos actualizar la versión de Android.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para que la barra de navegación no se oculte después de cerrar el teclado en una aplicación de pantalla completa

    Si la barra de navegación no se está ocultando después de cerrar el teclado en una aplicación de pantalla completa, incluso después de probar diferentes paquetes y métodos, estas son algunas soluciones posibles para solucionar el problema:

    1. Utiliza la bandera immersive para el modo de pantalla completa:
    SystemChrome.setEnabledSystemUIOverlays([]);
    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        systemNavigationBarColor: Colors.transparent,
      ),
    );
    
    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle(
        systemNavigationBarColor: Colors.transparent,
        systemNavigationBarDividerColor: null,
        statusBarColor: Colors.transparent,
        statusBarIconBrightness: Brightness.light,
        statusBarBrightness: Platform.isAndroid ? Brightness.dark : Brightness.light,
        systemNavigationBarIconBrightness: Brightness.dark,
      ),
    );
    
    SystemChannels.lifecycle.setMessageHandler((msg) async {
      if (msg.contains('resumed')) {
        SystemChrome.setEnabledSystemUIOverlays([]);
      }
      return;
    });
    
    WidgetsBinding.instance.addPostFrameCallback((_) {
      SystemChrome.setEnabledSystemUIOverlays([]);
    });
    
    1. Utiliza el paquete flutter_windowstate:

    Agrega el paquete a tu archivo pubspec.yaml:

    flutter_windowstate: ^1.1.1
    

    Luego, impórtalo y establece el estado de ImmersiveAppState:

    import 'package:flutter/material.dart';
    import 'package:flutter_windowstate/flutter_windowstate.dart';
    
    void main() {
      runApp(ImmersiveAppState(
        builder: (context) => MyApp(),
      ));
    }
    
    1. Utiliza SystemChrome.setEnabledSystemUIOverlays([]) para eliminar todas las superposiciones del sistema:
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    
    void main() {
      SystemChrome.setEnabledSystemUIOverlays([]);
      runApp(MyApp());
    }
    
    1. Actualiza tu archivo AndroidManifest.xml con los siguientes atributos:
    <activity android:windowsoftinputmode="adjustPan|adjustResize|stateHidden">
      <meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background"></meta-data>
      <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme"></meta-data>
      <meta-data android:name="io.flutter.embedding.android.PresentationTheme" android:resource="@style/PresentationTheme"></meta-data>
    </activity>
    

    Nota: No se recomienda alterar el atributo android:theme para aplicaciones de pantalla completa.

    1. Intenta eliminar cualquier variable o configuración personalizada relacionada con la barra de navegación.

    Si la barra de navegación aún no se oculta después de probar cada solución o combinación de soluciones, es posible que sea un problema específico del dispositivo.

Comments are closed.