【问题标题】:Flutter cannot refresh GoogleMap after getting coordinatesFlutter 获取坐标后无法刷新 GoogleMap
【发布时间】:2021-09-16 15:11:50
【问题描述】:

我有一个实现 GoogleMap 的应用。 我可以返回页面并使用预先设置的设置获得一张漂亮的地图,但是当我按下按钮并且没有预先设置任何内容时,我无法刷新地图。

小部件是在 Build() 上创建的,我有一个按钮,可以从地理定位器和城市名称反向查找中获取 lat 和 lng。 那叫 完成所有操作后保存 GPS()。
我通常直接从 Prefs.lat Prefs.lng 开始,但我尝试创建成员变量 _lng 和 _lat,包括一个 _zoom 变量,以便 setState 可以工作..它不起作用。不知道我做错了什么。

    Container(
      width: 350,
      height: 350,
      child: GoogleMap(
          markers: Set<Marker>.of(_markers),
          mapType: MapType.satellite,
          initialCameraPosition:
              CameraPosition(zoom: _zoom, target: LatLng(_lat, _lng))),
    ),
  void saveGps() async {
    DateTime now = DateTime.now();
    var timezoneOffset = now.timeZoneOffset;
    Prefs.cityName = _cityName;
    Prefs.offset = timezoneOffset.inMinutes / 60;

    setState(() {
      _lat = Prefs.lat = _position.latitude;
      _lng = Prefs.lng = _position.longitude;
      _markers.clear();
      _markers.add(Marker(
          markerId: MarkerId(Prefs.cityName),
          position: LatLng(Prefs.lat, Prefs.lng),
          infoWindow: InfoWindow(
            title: Prefs.cityName,
          )));
      _zoom = 17;
    });
  }

【问题讨论】:

    标签: flutter google-maps state


    【解决方案1】:

    我使用了地图控制器并调用了 animateCamera。这是使它工作的唯一方法。其他项目使用 setState 更新,但不是这个。

    // create this in your class
      Completer<GoogleMapController> _controller = Completer();
    
    // build method here..
            Container(
              width: 350,
              height: 350,
              child: GoogleMap(
                  onMapCreated: (GoogleMapController controller) {
                    _controller.complete(controller);
                  },
                  markers: Set<Marker>.of(_markers),
                  mapType: MapType.satellite,
                  initialCameraPosition: CameraPosition(
                      zoom: 16, target: LatLng(Prefs.lat, Prefs.lng))),
            ),
    

    当您想要保存或显示新地图时, 在此处调用此代码:

    final GoogleMapController controller = await _controller.future;
    controller.animateCamera(CameraUpdate.newCameraPosition(
        CameraPosition(zoom: 17, target: LatLng(Prefs.lat, Prefs.lng))));
    

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      相关资源
      最近更新 更多