我对Flutter和BLoC / Repository模式相对较新,在尝试将我的iOS应用移植到Flutter时,我试图了解如何在更复杂的情况下使用它。
我的应用使用_flutterMap
,Geolocator
和Firebase_database
(不是Firestore)。
功能是基本的地图功能,在当前位置上获取currentlocation
和center
地图,track
路线并将其保存到Firebase DB,在地图上放置标记并将其保存到Firebase DB 。
我有一个意大利面条式的代码可以处理currentLocation
mapSetup
并启动currentLocation
的流,但是我正在重构它以使用块模式。
到目前为止,我已经拥有marker
集团,据我所知,我应该同时拥有tracking
集团和location
集团。
现在我的问题是如何使flutterMap
小部件对所有集团做出反应?我看到这是为了构建一个对团体有反应的小部件,使用了BlocBuilder
。对于从Firebase发出的标记,我这样做是这样的:
BlocBuilder<AlertBloc, AlertState>(
bloc: AlertBloc(alertRepository: _alertRepository),
builder: (BuildContext context, AlertState state) {
return Container(
height: 670,
width: 370,
child: _flutterMap,
);
_flutterMap
还必须对位置组和跟踪组做出反应,以显示跟踪的路线。我见过MultiBlocProvider()
,但没有MultiBlocBuilder
,所以我想我必须使用另一种方法。
我对使用bloc进行数据流的想法是:
UI(centerButton + trackingButton)-(事件)-> MapBLoc-(mapEventToState)->存储库-(方法)-> 3个不同的dataProvider(tileDataProvider + geolocatorDataProvider + directionsDataProvider)
3个不同的dataProvider-(数据/流)->存储库-(数据/流)-> MapBloc-(状态)-> UI(地图)
这样,我就没有了AlertBloc
了。我可以让MapBloc
和AlertBloc
进行交流,我猜想并通过AlertBloc
通过MapBlock
传递数据array([[20.28466797, 19.24307251, 20.87997437, ..., 20.38343811,
19.70025635, 20.22036743],
[ 4.21954346, 17.05456543, 10.09838867, ..., 19.50102234,
19.62188721, 18.30804443],
[14.44546509, 19.43798828, 19.45491028, ..., 22.08952332,
17.83691406, 17.86752319])
。
使用BLoC模式是否比我正在考虑的方法更简单? 非常感谢您的宝贵时间和帮助