【问题标题】:Google Maps Current User Location - Flutter谷歌地图当前用户位置 - Flutter
【发布时间】:2021-04-12 18:24:24
【问题描述】:

我正在尝试从 Google 地图获取用户的当前位置,但我得到了一个异常作为回报,我似乎无法理解为什么会发生这种情况。 该应用程序很简单 - 获取用户的当前位置,然后将相机缩放到该位置。就是这样。

我将附上我的代码和异常消息。奇怪的是,正如您在异常消息中看到的那样,我正确地获取了我的 LatLng,那么为什么相机没有指向那个位置?

class Map extends StatefulWidget {
  @override
  _MapState createState() => _MapState();
}

class _MapState extends State<Map> {

  LatLng currentLatLng;
  Completer<GoogleMapController> _controller = Completer();


  @override
  void initState(){
    super.initState();
    Geolocator.getCurrentPosition().then((currLocation){
      setState((){
        currentLatLng = new LatLng(currLocation.latitude, currLocation.longitude);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    print("Current Location --------> " + currentLatLng.latitude.toString() + " " + currentLatLng.longitude.toString());
    return MaterialApp(
      home: new Scaffold(
        body: GoogleMap(
          mapType: MapType.normal,
          initialCameraPosition: CameraPosition(target: currentLatLng),
          onMapCreated: (GoogleMapController controller) {
            _controller.complete(controller);
          },
        ),
      ),
    );
  }
}

注意 - 我正在使用 pub.dev 中的“geolocator”和“google_maps_flutter” - 所有最新版本。

【问题讨论】:

  • 您必须传递target 参数。您必须将其设置为 null 或不向其传递任何内容。
  • 请上传您的日志,而不是您的日志截图。

标签: flutter google-maps dart


【解决方案1】:

这是异步编程。 currentLatLng 是 null 直到 getCurrentPosition 调用它的回调,所以你不能这样做:

initialCameraPosition: CameraPosition(target: currentLatLng)

因为,正如您的错误所示,currentLatLng 为空。

您的两个选择是:

  1. 将地图设置为您定义的默认位置,然后在getCurrentPosition 完成时使用地图控制器更新该位置。

  2. currentLatLng 为空时显示加载器,当它不再为空时,显示您的地图。

这是 2 的示例

    return MaterialApp(
      home: new Scaffold(
        body: currentLatLng == null ? Center(child:CircularProgressIndicator()) : GoogleMap(
          mapType: MapType.normal,
          initialCameraPosition: CameraPosition(target: currentLatLng),
          onMapCreated: (GoogleMapController controller) {
            _controller.complete(controller);
          },
        ),
      ),
    );

【讨论】:

  • 完美运行。选项 2 效果最好。谢谢!
猜你喜欢
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多