Saltar al contenido

Cómo establecer Estado dentro de showModalBottomSheet

Solución:

El problema aquí es que BottomSheet estas creando es no es parte de tu StatefulWidget. Si solo hizo que su widget tuviera estado con el propósito de usar setState dentro de showModalBottomSheet, puede revertir ese cambio ahora.

Lo que realmente quiere hacer es establecer el estado dentro de su BottomSheet. Lo haces pasando un StatefulWidget al builder o usando un StatefulBuilder, lo que haré para este ejemplo en aras de la simplicidad:

showModalBottomSheet(
  context: context,
  builder: (BuildContext context) {
    return BottomSheet(
      onClosing: () {},
      builder: (BuildContext context) {
        bool b = false;
        return StatefulBuilder(
          builder: (BuildContext context, setState) => Switch(
            onChanged: (bool v) {
              setState(() => b = v);
            },
            value: b,
          ),
        );
      },
    );
  },
);

También moví el b valor dentro del builder función de la BottomSheet.

Si desea utilizar el valor de b dentro de tu original StatefulWidget también, lo movería de nuevo y probablemente quiera llamar this.setState así como también para actualizar el otro widget (solo si lo necesita para actualizar).

También enfrenté el mismo problema. Es un pequeño truco, necesitas insertar StatefulBuilder en showModalBottomSheet. Usaré un código diferente para que alguien lo entienda fácilmente usando la casilla de verificación ahora que la respuesta llega muy tarde.

showModalBottomSheet(
    context: context,
    isScrollControlled: true,
    builder: (BuildContext context) {
    mpesachecked =false;
    return StatefulBuilder(builder: (BuildContext context, StateSetter mystate) {
          return Padding(
          padding: const EdgeInsets.fromLTRB(10.0, 70.0, 20.0, 20.0),
          child: Column(
            children: <Widget>[
                 Checkbox(
                      value: mpesachecked,
                      activeColor: Colors.green,
                      onChanged: (value) {
                        mystate(() {
                          mpesachecked = value;
                        });
                      }),
                 ])
                 ));
               });
    )

NOTA: el nuevo estado dentro de showModalBottomSheet es mi estado

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *