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.

Intenté crear una pantalla de presentación y esperar 3 segundos para luego ir a la página de inicio de sesión, pero Flutter arrojó un error. Por favor, ayúdeme a solucionarlo.

Recientemente empecé a desarrollar con Flutter e intenté crear una pantalla de presentación y esperar 3 segundos para luego ir a la página de inicio de sesión, pero Flutter arrojó un error. Por favor, ayúdame a solucionarlo.

FlutterError (setState () o markNeedsBuild () llamado durante la creación (build).
Este widget Overlay no se puede marcar como necesitando construirse porque el marco (framework) ya está en el proceso de construir widgets. Un widget solo puede ser marcado como necesitando ser construido durante la fase de creación si uno de sus ancestros se está construyendo actualmente. Esta excepción se permite debido a que el marco construye los widgets ascendentes antes que los descendentes, lo que significa que siempre se construirá un descendiente sucio. De lo contrario, el marco (framework) podría no visitar este widget durante esta fase de construcción.
El widget en el que se llamó a setState() o markNeedsBuild() fue:
Overlay-[LabeledGlobalKey#83433]
El widget que se estaba construyendo actualmente cuando se realizó la llamada ofensiva era:
Builder)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás experimentando un problema con el proceso de compilación de Flutter al intentar crear una pantalla de inicio que espere 3 segundos antes de navegar a la página de inicio de sesión. El mensaje de error que has recibido indica que estás intentando llamar a setState() o markNeedsBuild() durante la fase de compilación, lo cual no está permitido.

    Para resolver este problema, puedes intentar mover la lógica de la pantalla de inicio y navegación fuera del método Widget build(). Una posible solución es crear un StatefulWidget que muestre la pantalla de inicio y use un Temporizador para esperar 3 segundos antes de navegar a la página de inicio de sesión.

    Aquí tienes un ejemplo de cómo podría verse tu código:

    class SplashScreen extends StatefulWidget {
      @override
      _SplashScreenState createState() => _SplashScreenState();
    }
    
    class _SplashScreenState extends State<splashscreen> {
      @override
      void initState() {
        super.initState();
        Timer(Duration(seconds: 3), () {
          Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) => LoginPage()));
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Container(
            // añade aquí tu interfaz de la pantalla de inicio
          ),
        );
      }
    }
    

    Este código crea un StatefulWidget llamado SplashScreen que muestra su interfaz de usuario dentro de un Scaffold. En el método initState se usa un Temporizador para esperar 3 segundos antes de navegar a la página de inicio de sesión mediante el Navigator.

    Separando la lógica de la pantalla de inicio y navegación del método Widget build() deberías poder evitar el error que estás experimentando.

    Espero que esto te ayude. Hazme saber si tienes alguna otra pregunta.

Comments are closed.