Flutter: пакет BLoC - поставщик блоков

Я использую этот пакет: https://pub.dartlang.org/packages/bloc . У меня есть 2 представления: в первом я показываю список элементов с помощью «bloc1», а с помощью FloatingActionButton я могу перейти ко второму экрану, использующему «bloc2». На этом втором экране я хочу добавить элемент в свой предыдущий список через поставщика Bloc "bloc1", чтобы я мог сделать что-то вроде bloc1.dispatch(addElement). У меня вопрос: как я могу объявить bloc-провайдером bloc1? Например, что-то вроде: Bloc bloc = BlocProvider.of<Bloc1>(context)


person Little Monkey    schedule 22.01.2019    source источник


Ответы (2)


Вам нужно будет обернуть ваше MaterialApp BlocProvider, например:

BlocProvider(bloc: bloc1, child: MaterialApp(...));

Затем вы можете получить доступ к bloc1 из любого места, используя: BlocProvider.of<Bloc1>(context)

Надеюсь, это поможет!

person Felix Angelov    schedule 26.02.2019
comment
Разве упаковка всего виджета страницы, не говоря уже о MaterialApp целиком, в BlocProvider не вызовет проблем с производительностью? - person Tom; 04.03.2019
comment
Нет, проблем с производительностью быть не должно. Только части пользовательского интерфейса, которые вы обернули с помощью BlocBuilder, будут перестроены независимо от того, насколько высоко BlocProvider находится в дереве. Главное, о чем следует помнить, - вы всегда должны ограничивать блок только той частью дерева виджетов, которая в нем нуждается. - person Felix Angelov; 21.08.2019

Bloc теперь поддерживает MultiBlocProvider, который помогает вам настроить все ваши блоки один раз в основном и использовать его в любом месте вашего кода.

В вашем main.dart

return MultiBlocProvider(
  providers: [
    BlocProvider<BlocA>(create: (BuildContext context) => BlocA(),),
    BlocProvider<BlocB>(create: (BuildContext context) => BlocB(),),
  ],
  child: MaterialApp(....),
)
person Theophilus Paintsil    schedule 26.06.2020