我正在尝试在地图应用程序中使用bloc pattern。启动应用程序时,首先找到用户位置,然后将地图中心更改为用户位置。 当用户移动时,我想更改地图上的标记。这是我的代码:
class HomeFoursquareScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<LocationBloc, LocationState>(
builder: (context, locationState) {
if (locationState is LocationLoadingState) {
return const Center(child: CircularProgressIndicator());
} else if (locationState is LocationLoadedState) {
return _MyMap(locationState.location);
} else {
return const Text('oops...something went wrong');
}
},
);
}
}
class _MyMap extends StatelessWidget {
const _MyMap({Key key, @required this.location}) : super(key: key);
final Location location;
@override
Widget build(BuildContext context) {
return BlocBuilder<FourSquareBloc, FourSquareState>(
builder: (context, foursquareState) {
return FlutterMap(...);
}
);
},
)
但是正如您每次在我的代码中看到的那样,这意味着用户移动LocationLoadedState
并触发_MyMap
小部件并重新创建FlutterMap
时!我认为这样做不利于性能,并且连续创建新的map实例也不合逻辑!这样对吗 ?正确的方法是什么?
我想成为固定的地图,但是诸如MapOptions或Marker之类的东西会在新数据到达时获取数据。