Воссоздай карту в стиле blo c каждый раз, когда получаешь новое местоположение - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь использовать 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, получают данные при поступлении новых данных.

...