Flutter - Google Maps не ждет от местоположения - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь показать карту с текущим местоположением. Для этого я использовал Местоположение и Google Map плагинов (последняя версия).

У меня есть код, похожий на:

var lng, lat;

          @override
          initState() {
            super.initState();
            loading = true;
            getLocation();
          }

              Future getLocation() async {
                    final location = Location();
                    var currentLocation = await location.getLocation();
                    setState(() {
                      lat = currentLocation.latitude;
                      lng = currentLocation.longitude;
                      loading=false;
                    });
                  }

             loading==false ? GoogleMap(
                 mapType: MapType.hybrid,
                 myLocationButtonEnabled: true,
                 myLocationEnabled: true,
                 initialCameraPosition: CameraPosition(
                      target: LatLng(lat, lng),
                      zoom: 15.0,
                            )):null,

Когда мы переходим к просмотру с картой, ошибка появляется примерно через 1 с (затем просматриваем загрузку правильно) с этой ошибкой в ​​консоли

I / флаттер (15567): ИСКЛЮЧЕНИЕ, ЗАПРЕЩЕННОЕ БИБЛИОТЕКОЙ ВИДЖЕТОВ ╞═════════════════════════════════════════════════ ══════════ I / флаттер (15567): Следующее утверждение было брошено здание Экран HomePageScreen (грязный, зависимости: I / флаттер (15567): [_LocalizationsScope- [GlobalKey # 78c30], MediaQuery], состояние: _HomePageScreen # 9c9d2): I / flutter (15567): 'package: google_maps_flutter / src / location.dart': ошибочное утверждение: строка 17, позиция 16: «широта! = I / флаттер (15567): ноль»: неверно.

Я отлаживаю его, и ошибка относительно проста: Местоположение плагин загружает медленную широту и долготу, Google Maps плагин загружается быстрее. Итак, у нас есть ошибка.

Вопрос: как заставить карту Google ждать местоположение и долготу из плагина Location?

Ответы [ 3 ]

1 голос
/ 20 мая 2019

Показывает пустой Container() или любой индикатор загрузки, когда ваши lat и lng равны нулю.

lat == null || lng == null
  ? Container()
  : GoogleMap(
      mapType: MapType.hybrid,
      myLocationButtonEnabled: true,
      myLocationEnabled: true,
      initialCameraPosition: CameraPosition(
        target: LatLng(lat, lng),
        zoom: 15.0,
      ),
    );
0 голосов
/ 20 мая 2019

Вы также можете попробовать это и избавиться от пустых Container.

GoogleMap(
      mapType: MapType.hybrid,
      myLocationButtonEnabled: true,
      myLocationEnabled: true,
      initialCameraPosition: CameraPosition(
        target: LatLng(lat ?? 0, lng ?? 0), // so if lat, lng is null, we use 0 as placeholder. 
        zoom: 15.0,
      ),
    )
0 голосов
/ 20 мая 2019

вы можете отображать загрузчик, пока не получите свое местоположение,

var lng, lat;

      @override
      initState() {
        super.initState();
        loading = true;
        getLocation();
      }

          Future getLocation() async {
                final location = Location();
                var currentLocation = await location.getLocation();
                setState(() {
                  lat = currentLocation.latitude;
                  lng = currentLocation.longitude;
                  loading=false;
                });
              }

         loading==false ? GoogleMap(
             mapType: MapType.hybrid,
             myLocationButtonEnabled: true,
             myLocationEnabled: true,
             initialCameraPosition: CameraPosition(
                  target: LatLng(lat, lng),
                  zoom: 15.0,
                        )):CircularProgressIndicator(),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...