Flutter-Google Maps等不及去位置

时间:2019-05-20 12:34:03

标签: google-maps flutter

我正在尝试显示当前位置的地图。为此,我使用了LocationGoogle 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 / flutter(15567):W小组件库引起的异常提示   ╞═════════════════════════════════════════════════ ══════════我/扑   (15567):以下断言被抛出   HomePageScreen(脏,依赖项:I / flutter(15567):   [_LocalizationsScope- [GlobalKey#78c30],MediaQuery)状态:   _HomePageScreen#9c9d2):I / flutter(15567):“ package:google_maps_flutter / src / location.dart”:失败的断言:   第17行pos 16:'latitude!= I / flutter(15567):null':不正确。

我对其进行调试,错误相对简单: Location 插件加载纬度和经度较慢, Google Maps 插件加载速度更快。所以我们有一个错误。

问题是:如何强制Google地图通过“位置”插件等待位置和经度?

3 个答案:

答案 0 :(得分:0)

您可以显示装载机,直到找到您的位置为止,

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(),

答案 1 :(得分:0)

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,
      ),
    );

答案 2 :(得分:0)

您也可以尝试使用此方法,并摆脱空的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,
      ),
    )