Флаттер Google Maps не определяет текущее местоположение устройства - PullRequest
0 голосов
/ 02 июня 2019

Я использую пакеты Flutter Geolocator и Google Maps для определения местоположения устройства.Я использую Круговой индикатор выполнения, чтобы дождаться определения текущего местоположения.После определения Google Карты загружаются с указанием местоположения устройства.

При загрузке приложения отображается круговой индикатор выполнения, но карта не загружается, несмотря на то, что уведомление отображается и принимается для использования служб определения местоположения;приложение висит на круглом индикаторе выполнения.Я не считаю, что это проблема API, поскольку я успешно загрузил карту с координатами, указанными в InitialCameraPosition.

Если местоположение устройства не определено, что является причиной того, что карта не загружается суказано местоположение?

Я попытался запустить приложение как на эмуляторе Android, так и на физическом устройстве, но безуспешно.

Android Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="smartkart.app.com.coffee">

<!-- io.flutter.app.FlutterApplication is an android.app.Application 
 that
     calls FlutterMain.startInitialization(this); in its onCreate 
  method.
     In most cases you can leave this as-is, but you if you want to   
      provide
     additional functionality it is fine to subclass or reimplement
     FlutterApplication and put your custom class here. -->

 <uses-permission  
 android:name="android.permission.ACCESS_FINE_LOCATION" />



<application
    android:name="io.flutter.app.FlutterApplication"
    android:label="coffee"
    android:icon="@mipmap/ic_launcher">
    <meta-data android:name="com.google.android.geo.API_KEY"
               android:value="API KEY HERE"/>
    <activity../>



Maps Screen

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';

class FirstScreen extends StatefulWidget {
 const FirstScreen({Key key}) : super(key: key);

  @override
  State<FirstScreen> createState() => _FirstScreen();
}

class _FirstScreen extends State<FirstScreen> {
  GoogleMapController mapController;

 var currentLocation;


@override
void initState(){
  super.initState();
  Geolocator().getCurrentPosition().then((currloc){
    currentLocation = currloc;
  });
}


  @override
  Widget build(BuildContext context) {
    return currentLocation == null ? Container(
      alignment: Alignment.center,
      child: Center(
        child: CircularProgressIndicator(),
      ),
    ):
      Stack(
      children: <Widget>[
        GoogleMap(
          initialCameraPosition:
           CameraPosition(target: LatLng(currentLocation.latitude,      
              currentLocation.longitude), zoom: 10),
          onMapCreated: _onMapCreated,
          myLocationEnabled: true,
          mapType: MapType.normal,
        ),
      ],
    );
  }



  void _onMapCreated(GoogleMapController controller) {
    setState(() {
      mapController = controller;
    });
  }


}

Я ожидаю, что уведомление будет использовать службы определения местоположения при круговом ходепанель отображается.После определения местоположения InitialCameraPosition отображает местоположение устройства на карте.

1 Ответ

0 голосов
/ 03 июня 2019

Похоже, вы отсутствует setState в вашем initState. Это должно выглядеть так:

@override
void initState(){
  super.initState();
  Geolocator().getCurrentPosition().then((currloc){
    setState((){
      currentLocation = currloc;
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...