Возможно ли иметь несколько блоков blo c на одном виджете или разные блоки должны общаться? - PullRequest
0 голосов
/ 24 февраля 2020

Я относительно новичок в Flutter и шаблоне BLoC / Repository, и я пытаюсь понять, как использовать его в этом более сложном сценарии, поскольку я портирую свое приложение iOS на флаттер. Мое приложение использует _flutterMap, Geolocator и Firebase_database (не Firestore). Функциональные возможности - это основные функции c карт, получение currentlocation и center карты на currentLocation, track маршрута и сохранение его в базе данных Firebase, размещение маркера на карте и сохранение его в базе данных Firebase.
У меня есть код спагетти, который заботится о currentLocation mapSetup и запускает поток currentLocation, но я реорганизую его для использования шаблона blo c. Пока у меня есть marker blo c, и, насколько я понял, у меня должен быть tracking blo c, а также location blo c.

Теперь мой вопрос: как заставить виджет flutterMap реагировать на все блоки? Я вижу, что для создания виджета, который реагирует на blo c, используется BlocBuilder. А для маркеров, идущих с firebase, я сделал это так:

BlocBuilder<AlertBloc, AlertState>(
                  bloc: AlertBloc(alertRepository: _alertRepository),
                  builder: (BuildContext context, AlertState state) {
                    return Container(
                      height: 670,
                      width: 370,
                      child: _flutterMap,
                    );

_flutterMap также должен реагировать на местоположение blo c и на отслеживающий блок c для отображения отслеживаемого маршрута. , Я видел MultiBlocProvider(), но нет MultiBlocBuilder, поэтому я думаю, что мне нужно использовать другой подход.

Моя идея потока данных с использованием blo c:

UI (centerButton + trackingButton) - (событие) -> MapBLo c - (mapEventToState) -> Репозиторий - (метод) -> 3 разных dataProvider (tileDataProvider + geolocatorDataProvider + directionsDataProvider)

3 разных dataProvider - (data / Stream) -> Репозиторий - (data / Stream) -> MapBlo c - (state) -> UI (Map)

Таким образом, тесто у меня осталось без AlertBloc. Я мог бы заставить MapBloc и AlertBloc общаться, я думаю, и передать AlertBloc данные через MapBlock, как в этом ответе Флаттер, используя blo c в блоке c.

Есть ли более простой способ использовать паттерн BLo C, чем тот, о котором я думаю? Большое спасибо за ваше время и помощь

...