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