Если у нас есть 3 BLoC в BlocProvider, можем ли мы использовать 2 BLoCBuilder в одном классе? - PullRequest
0 голосов
/ 26 июня 2019

Предположим, у меня есть 3 BLoC в BlocProviderTree, это означает, что эти блоки доступны для класса. один из них используется в качестве BlocListener, теперь я хочу, чтобы два других BLoC использовались в качестве BlocBuilders, потому что мне нужно создать состояние их обоих на одной странице. BlocListener принимает детей, а не детей. Пожалуйста, помогите!

BlocListener принимает детей, а не детей. Пожалуйста, помогите!

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);
                  },
                )
            )
        ),

Я хочу SpaceNames с суммами, если количество элементов четное. Я получаю суммы правильно, но пробелы находятся в другом блоке. Как определить два BlocBuilders?

1 Ответ

0 голосов
/ 26 июня 2019

Вы можете вкладывать BlocBuilder s друг в друга:

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');
      },
    );
  },
);
...