Я пытаюсь использовать blo c 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
воссоздается !! Я думаю, что это не хорошо для производительности, и не логично постоянно создавать новый экземпляр карты! Это правильно ? И каков правильный путь?
Я хочу, чтобы карта фиксировалась, но другие вещи, такие как MapOptions или Marker, получают данные при поступлении новых данных.