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.

El diálogo no se muestra en el evento del clic del botón en Flutter Web.

Estoy tratando de mostrar una ventana emergente de diálogo cada vez que el usuario hace clic en un botón. Sin embargo, cada vez que pruebo esto, el diálogo no se muestra y se ha lanzado una excepción en la consola de Chrome.

Mensaje de excepción:

Uncaught TypeError: No se pueden leer propiedades de nulo (leyendo ‘toString’)
en Object.a9 (main.dart.js:16645)
en Object.DV (main.dart.js:4402)
en main.dart.js:65305
en b7F.a (main.dart.js:20524)
en b7F.$2 (main.dart.js:49122)
en Object.l (main.dart.js:20510)
en aUl.$0 (main.dart.js:65307)
en NQ.YO (main.dart.js:80893)
en Object.eval (eval at bio (main.dart.js:13895), :3:55)
en je.a5X (main.dart.js:76162)

y aquí está mi código en Dart:

ElevatedButton(
onPressed: () async {
showDialog(context: context, builder: (_){
return const AlertDialog(title: Text(“Test”),);
});
},
child: const Text(“Test”)
)

Intenté poner “await” antes de “showDialog”, pero el problema persiste.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema en este código podría ser que la variable context no está definida. La variable context normalmente se obtiene del árbol de widgets y es necesaria para que el método showDialog funcione correctamente.

    Para solucionar esto, puedes intentar envolver tu widget ElevatedButton dentro de un widget Builder, de esta manera:

    Builder(
      builder: (context) => ElevatedButton(
        onPressed: () async {
          showDialog(
            context: context,
            builder: (_) => const AlertDialog(title: Text("Prueba"),),
          );
        },
        child: const Text("Prueba")
      ),
    )
    

    Esto crea un nuevo objeto BuildContext que puede ser utilizado por el método showDialog.

    Si esto no resuelve el problema, también podrías verificar si la variable context es nula. Podrías agregar una cláusula de protección al inicio de tu método onPressed, de esta manera:

    onPressed: () async {
      if (context == null) return;
      showDialog(
        context: context,
        builder: (_) => const AlertDialog(title: Text("Prueba"),),
      );
    },
    

    Esto evitará que el código ejecute el método showDialog si la variable context es nula.

    ¡Espero que esto ayude a resolver tu problema!

Comments are closed.