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.

ERROR: El contenido de SnackBar – Buscar el ancestro de un widget desactivado no es seguro.

Tengo un problema y se refiere al contenido del SnackBar. He creado una clase donde contiene lo siguiente:

class ActionSuccessSnackBar extends StatelessWidget {
  const ActionSuccessSnackBar({
    Key key,
    this.isCreation,
    this.name,
  }) : super(key: key);

  final bool isCreation;
  final String name;

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Expanded(
          child: Container(
            child: Text(
              name,
              style: TextStyle(
                fontWeight: FontWeight.bold,
              ),
            ),
          ),
        ),
        Container(
          child: Text(
            isCreation
                ? Text("creado")
                : Text("actualizado"),
          ),
        ),
      ],
    );
  }
}

LLamo a esta clase en un SnackBar como contenido (en el widget padre), y se muestra en el siguiente ejemplo:

enter image description here

Código:

ScaffoldMessenger.of(context).showSnackBar(SnackBar(
   duration: Duration(seconds: 2),
   content: ActionSuccessSnackBar(
       name: "hola",
       isCreation: false,
     ),
   backgroundColor: Colors.green,
));

Sin embargo, cuando vuelvo al menú principal (pop) obtengo el siguiente error:

enter image description here

¿Alguna idea sobre este problema? Si elimino la clase que creé y solo pongo un texto, funciona, lo mismo si coloco la fila en el contenido sin la clase, pero eso no es lo que quiero.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la forma en que estás construyendo el widget Text dentro de la clase ActionSuccessSnackBar. En lugar de pasar una cadena de texto al widget Text, estás pasando otro widget Text como argumento, lo cual no es válido.

    Para solucionar este problema, cambia las líneas dentro del widget Container en la clase ActionSuccessSnackBar de la siguiente manera:

    Container(
      child: Text(
        isCreation ? "created" : "updated",
      ),
    ),
    

    Esto pasará directamente la cadena de texto “created” o “updated” al widget Text.

    Una vez que realices este cambio, la clase ActionSuccessSnackBar debería funcionar como se espera y podrás mostrarla dentro de un SnackBar sin problemas.

Comments are closed.