Supongamos que tengo 3 bloques en el blocProvidertree, significa que estos bloques están disponibles para la clase. Uno de ellos se usa como bloclistener, ahora quiero que los otros dos bloques se usen como blocbuilders porque necesito crear un estado de ambos en la misma página. BlocListener acepta a los niños y no a los niños. ¡Por favor ayuda!

BlocListener acepta a los niños y no a los niños. ¡Por favor ayuda!

BlocProviderTree(
            blocProviders: [

              BlocProvider<EvenBloc>(bloc: _evenBloc),
              BlocProvider<SumBloc>(bloc: _sumsBloc,),
              BlocProvider<SpacesBloc>(bloc: _spacesBloc,),

            ],
            child: BlocListener(
                bloc: _evenBloc,
                listener: (BuildContext context, EvenState state) {
                  if (state is NowEven) {
                    _sumsBloc.dispatch(LoadSums());
                  }
                },

                child: BlocBuilder<SumsEvent,SumsState>(
                  bloc: _programsBloc,
                  builder: (BuildContext context, SumsState state) {
                    if (state is SumsEmpty)
                      return Container(height: 0.0, width: 0.0,);
                    if (state is SumsLoading)
                      return Evens(
                        child: SpinKitDoubleBounce(
                          color: darkIndigo,
                          size: 70.0,
                        ),
                      );
                    else if (state is SumsLoaded)
                      return _body( context,state.sums);
                  },
                )
            )
        ),

Quiero spaceneams con sumas si el número de artículos es incluso. Estoy obteniendo sumas correctamente, pero los espacios están en otros bloques. ¿Cómo defino dos blocbuilders?

2
Shubhra Deshpande 26 jun. 2019 a las 17:31

1 respuesta

La mejor respuesta

Puedes anidar BlocBuilder s dentro uno al otro:

BlocBuilder(
  bloc: BlocProvider.of<Foo>(context),
  builder: (context, FooState fooState) {
    return BlocBuilder(
      bloc: BlocProvider.of<Bar>(context),
      builder: (context, BarState barState) {
        return Text('$fooState $barState');
      },
    );
  },
);
5
Rémi Rousselet 26 jun. 2019 a las 15:06