Я относительно новичок в 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, чем тот, о котором я думаю? Большое спасибо за ваше время и помощь