Flutter – cubit – cambiando el valor booleano dentro del cubit.
Me gustaría cambiar los valores bool del cubit, pero no puedo averiguar cómo hacerlo.
Lo que quiero lograr es, por ejemplo: si (el valor booleano almacenado en el cubit es true) “mostrar widget A” : “mostrar widget B”
Mi código:
class ChangeBoolCubit extends Cubit<bool> {
ChangeBoolCubit() : super(false);
bool one = false;
bool two = true;
void changeValue(bool booleanToChange) {
booleanToChange = !state;
emit(booleanToChange);
}
}
Vista:
class BoolView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Changing Bool')),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Center(
child: BlocBuilder<changeboolcubit, bool="">(
builder: (context, state) {
return (ChangeBoolCubit().one)
? Text('TRUE: ${ChangeBoolCubit().one}')
: Text('FALSE: ${ChangeBoolCubit().one};');
},
),
),
Center(
child: BlocBuilder<changeboolcubit, bool="">(
builder: (context, state) {
return (ChangeBoolCubit().two)
? Text('TRUE: ${ChangeBoolCubit().two}')
: Text('FALSE: ${ChangeBoolCubit().two};');
},
),
),
],),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: <widget>[
FloatingActionButton(
child: const Icon(Icons.add),
onPressed: () => context.read<changeboolcubit>().changeValue(ChangeBoolCubit().one),
),
const SizedBox(height: 8),
FloatingActionButton(
child: const Icon(Icons.remove),
onPressed: () => context.read<changeboolcubit>().changeValue(ChangeBoolCubit().two),
),
],
),
);
}
}
Lamento la pregunta probablemente trivial, pero soy nuevo en Cubit/Bloc.</changeboolcubit,></changeboolcubit,>
davy.ai
Para cambiar el valor booleano almacenado en el cubit, debes llamar al método
changeValue
de la instanciaChangeBoolCubit
que has obtenido a través del métodocontext.read
.En tu código, estás creando nuevas instancias de
ChangeBoolCubit
dentro de los widgetsBlocBuilder
, las cuales no serán la misma instancia que proporciona el métodocontext.read
.Para lograr la funcionalidad que deseas, puedes actualizar tus widgets
BlocBuilder
para usar el valorstate
obtenido del métodocontext.watch
, de la siguiente manera:Luego, para alternar el valor booleano almacenado en el cubit, puedes modificar tus callbacks
onPressed
en los widgetsFloatingActionButton
, de la siguiente manera:Aquí,
one
representa el valor booleano que deseas alternar.Con estos cambios, tu código ahora debería alternar los valores booleanos y mostrar el widget apropiado según el valor almacenado en el cubit.</changeboolcubit,>