Я использую этот пакет: https://pub.dartlang.org/packages/bloc . У меня есть 2 представления: в первом я показываю список элементов с помощью «bloc1», а с помощью FloatingActionButton я могу перейти ко второму экрану, использующему «bloc2». На этом втором экране я хочу добавить элемент в свой предыдущий список через поставщика Bloc "bloc1", чтобы я мог сделать что-то вроде bloc1.dispatch(addElement)
. У меня вопрос: как я могу объявить bloc-провайдером bloc1? Например, что-то вроде: Bloc bloc = BlocProvider.of<Bloc1>(context)
Flutter: пакет BLoC - поставщик блоков
Ответы (2)
Вам нужно будет обернуть ваше MaterialApp BlocProvider, например:
BlocProvider(bloc: bloc1, child: MaterialApp(...));
Затем вы можете получить доступ к bloc1 из любого места, используя: BlocProvider.of<Bloc1>(context)
Надеюсь, это поможет!
person
Felix Angelov
schedule
26.02.2019
Разве упаковка всего виджета страницы, не говоря уже о
MaterialApp
целиком, в BlocProvider
не вызовет проблем с производительностью?
- person Tom; 04.03.2019
Нет, проблем с производительностью быть не должно. Только части пользовательского интерфейса, которые вы обернули с помощью 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