【问题标题】:HERE map won't open with Geolocator method - Flutter使用 Geolocator 方法无法打开 HERE 地图 - Flutter
【发布时间】:2021-07-27 20:39:48
【问题描述】:

我的应用正在加载 HERE 地图,并且可以使用一组手动输入的坐标作为中心点正常工作。

我在应用程序的另一部分实现了Geolocator 以生成用户位置,然后将其实现为一个函数,以查找其当前位置附近的地点并显示在地图上。

我现在已经使用了Geolocator 定位器,并想用它来打开用户位置上的地图。代码使用asyncawait获取用户坐标。

地图打开功能不想接受async/ await,但我尝试在自己的类中构建它并拉取坐标,但没有成功。

我比较新,任何建议都非常感谢

Async & Await 目前在“打开地图的功能”中带有红色下划线,当我在“打开地图的功能”顶部将MapMarkerExample 更改为mapMarkerExample 时,_mapMarkerExample = MapMarkerExample (_showDialog, hereMapController); 为红色在“打开地图的命令”上加下划线

打开地图的命令

void _onMapCreated(HereMapController hereMapController) {
    hereMapController.mapScene.loadSceneForMapScheme(MapScheme.normalDay, (MapError error) {
      if (error == null) {
        _mapMarkerExample = MapMarkerExample (_showDialog, hereMapController);
      } else {
        print("Map scene not loaded. MapError: " + error.toString());
      }
    });
  }

地图打开功能

MapMarkerExample(ShowDialogFunction showDialogCallback, HereMapController hereMapController) async {
    _showDialog = showDialogCallback;
    _hereMapController = hereMapController;

    Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);

    var lat = position.latitude;
    var long = position.longitude;

    double distanceToEarthInMeters = 8000;
    _hereMapController.camera.lookAtPointWithDistance(
      GeoCoordinates(lat, long), distanceToEarthInMeters);

    
    _setTapGestureHandler();

    _showDialog("Note", "Tap markers for more.");
    }

【问题讨论】:

    标签: ios flutter dart here-api


    【解决方案1】:

    问题是MapMarkerExample()是构造函数,构造函数不能异步执行。

    解决此问题的一种可能方法是不在MapMarkerExample() 构造函数中设置坐标。只需调用它来创建实例。然后在第二种方法_setMapTarget()你可以设置地图的中心坐标。

    _setMapTarget() 被标记为异步,所以它会立即执行,不会阻塞_onMapCreated()。但它稍后会发挥作用,获取位置,一旦有了位置,它就会更新相机。

    如果获取位置需要很长时间,那么您会在那时看到地图的默认相机位置。

      void _onMapCreated(HereMapController hereMapController) {
        hereMapController.mapScene.loadSceneForMapScheme(MapScheme.normalDay, (MapError? error) {
          if (error == null) {
            _mapMarkerExample = MapMarkerExample(_showDialog, hereMapController);
            _setMapTarget(hereMapController);
          } else {
            print("Map scene not loaded. MapError: " + error.toString());
          }
        });
      }
    
      Future<void> _setMapTarget(HereMapController hereMapController) async {
        Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    
        var lat = position.latitude;
        var long = position.longitude;
    
        double distanceToEarthInMeters = 8000;
        hereMapController.camera.lookAtPointWithDistance(GeoCoordinates(lat, long), distanceToEarthInMeters);
      }
    

    【讨论】:

      猜你喜欢
      • 2022-06-16
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多