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.

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,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para cambiar el valor booleano almacenado en el cubit, debes llamar al método changeValue de la instancia ChangeBoolCubit que has obtenido a través del método context.read.

    En tu código, estás creando nuevas instancias de ChangeBoolCubit dentro de los widgets BlocBuilder, las cuales no serán la misma instancia que proporciona el método context.read.

    Para lograr la funcionalidad que deseas, puedes actualizar tus widgets BlocBuilder para usar el valor state obtenido del método context.watch, de la siguiente manera:

    BlocBuilder<changeboolcubit, bool="">(
      builder: (context, state) {
        return state 
          ? Text('VERDADERO: $state')
          : Text('FALSO: $state');
      },
    ),
    

    Luego, para alternar el valor booleano almacenado en el cubit, puedes modificar tus callbacks onPressed en los widgets FloatingActionButton, de la siguiente manera:

    onPressed: () => context.read<changeboolcubit>().changeValue(one),
    

    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,>

Comments are closed.