#flutter #bloc #flutter-bloc
#flutter #блок #flutter-блок
Вопрос:
Я совсем застрял на этом в течение последних нескольких дней.
Итак, мой вариант использования здесь: A -> B -> C -> D
Обновляйте некоторые данные в A, когда происходят некоторые изменения в D. A, B, C, D — это разные экраны.
Теперь я понимаю, что мы можем предоставить два поставщика общему с помощью MultiBlocProvide. но я использую маршрут с добавленным именем, не уверен, как общаться здесь с помощью блоков.
routes: {
Routes.ScreenA: (context) => _getScreenA(),
Routes.ScreenB: (context) => _getScreenB(),
Routes.ScreenC: (context) => _getScreenC(),
Routes.ScreenD: (context) => _getScreenD(),
}
_getScreenA() {
return BlocProvider<ScreenABloc>(
create: (context) =>
ScreenABloc(),
child: ScreenARoute());
}
_getScreenB() {
return BlocProvider<ScreenBBloc>(
create: (context) => ScreenBBloc(),
child: ScreenBRoute());
}
_getScreenC() {
return BlocProvider<ScreenCBloc>(
create: (context) => ScreenCBloc(),
child: ScreenCRoute());
}
_getScreenD() {
return BlocProvider<ScreenDBloc>(
create: (context) => ScreenDBloc(),
child: ScreenDRoute());
}
Также проверил пример Todo, но теперь уверен, как подключить его здесь.
Ответ №1:
Вместо того, чтобы оборачивать каждый маршрут с BlocProvider
помощью wrap your MaterialApp
в вашем main.dart
файле с MultiBlocProvider
помощью, а затем инициализировать там все необходимые bloc
классы, они будут доступны везде в вашем приложении. Если вы собираетесь определять один и тот же bloc
путь по разным маршрутам — будут некоторые несоответствия данных, потому что вы не используете один и тот же экземпляр a bloc
.
Комментарии:
1. Спасибо за ответ, я точно могу это сделать, но считаете ли вы, что это божественная идея — размещать блоки во всем дереве виджетов. Я имею в виду, что с точки зрения дизайна мы предоставляем все данные во всем приложении.