Как передавать данные вниз по дереву с помощью flutter_blocs?

#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. Спасибо за ответ, я точно могу это сделать, но считаете ли вы, что это божественная идея — размещать блоки во всем дереве виджетов. Я имею в виду, что с точки зрения дизайна мы предоставляем все данные во всем приложении.