Google maps 颤振贴图,设置状态不更新标记和多边形

Google maps 颤振贴图,设置状态不更新标记和多边形,google-maps,flutter,dart,Google Maps,Flutter,Dart,在初始化贴图时直接给定标记和多边形似乎可以工作,但在调用setState方法时不会添加多边形和标记 我不知道我错过了什么 以下是我到目前为止所做的尝试 有没有人能帮我解决我遗漏的问题,因为地图没有更新 import 'dart:async'; import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:l

在初始化贴图时直接给定标记和多边形似乎可以工作,但在调用setState方法时不会添加多边形和标记

我不知道我错过了什么

以下是我到目前为止所做的尝试

有没有人能帮我解决我遗漏的问题,因为地图没有更新

  import 'dart:async';
  import 'package:flutter/material.dart';
  import 'package:google_maps_flutter/google_maps_flutter.dart';
  import 'package:location/location.dart';

  class HomeWidget extends StatefulWidget {
  @override
    State<StatefulWidget> createState() => _MyHome();
  }

  class _MyHome extends State<HomeWidget> {
  Completer<GoogleMapController> _controller = Completer();

  double _latitude;
  double _longitude;

  CameraPosition _kGooglePlex = CameraPosition(
  target: LatLng(13.092191, 80.246994), zoom: 19.151926040649414);

  @override
  void initState() {
   this._getLocation().then((value) {
   this._latitude = value.latitude;
   this._longitude = value.longitude;
   _kGooglePlex = CameraPosition(
    target: LatLng(_latitude, _longitude),
    zoom: 14.4746,
   );
   });
   super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  Map<String, double> userLocation;
  LocationData currentLocation;

  var location = new Location();
  Set<Marker> _markers = Set();
  Set<Polygon> _polygons = Set();
  GoogleMap map;

  CameraPosition _kLake =
  CameraPosition(target: LatLng(13.092191, 80.246994), tilt: 0, zoom: 14);
  @override
  Widget build(BuildContext context) {
   map = GoogleMap(
   mapType: MapType.hybrid,
   polygons: _polygons,
   markers: _markers,
   initialCameraPosition: _kGooglePlex,
   onMapCreated: (GoogleMapController controller) {
     _controller.complete(controller);
     addMarker(LatLng(_latitude, _longitude));
   },
   onTap: _addPolygon,
   );
   return new Scaffold(
   body: map,
  );
  }

  List<LatLng> polypoints = List();
  _addPolygon(LatLng points) {
    assert(points != null);
    polypoints.add(points);
    if (polypoints.length > 4) {
      print("called polygon");
      print(polypoints);
    setState(() {
       _polygons.add(Polygon(
        polygonId: PolygonId('test'),
        points: polypoints,
        strokeColor: Colors.blue));
    });
    polypoints.clear();
   }
  }

 void addMarker(LatLng mLatLng) {
  setState(() {
   _markers.add(Marker(
      // This marker id can be anything that uniquely identifies each marker.
      markerId: MarkerId('title'),
      position: mLatLng,
      infoWindow: InfoWindow(
        title: 'someTile',
        snippet: 'some desc',
      ),
      icon: BitmapDescriptor.defaultMarker));
   });
  }


 Future<LocationData> _getLocation() async {
  try {
   currentLocation = await location.getLocation();
  } catch (e) {
  if (e.code == 'PERMISSION_DENIED') {
    print('Permission denied');
  }
}
return currentLocation;
}
}
导入'dart:async';
进口“包装:颤振/材料.省道”;
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
导入“package:location/location.dart”;
类HomeWidget扩展了StatefulWidget{
@凌驾
State createState()=>\u MyHome();
}
类MyHome扩展状态{
Completer _controller=Completer();
双纬度;
双经度;
CameraPosition _kGooglePlex=CameraPosition(
目标:LatLng(13.092191,80.246994),缩放:19.151926040649414;
@凌驾
void initState(){
这个。_getLocation()。然后((值){
这是。_纬度=值。纬度;
这是._longide=value.longide;
_kGooglePlex=摄像机定位(
目标:纬度(经度),
缩放:14.4746,
);
});
super.initState();
}
@凌驾
无效处置(){
super.dispose();
}
地图用户位置;
位置数据当前位置;
var location=新位置();
Set _markers=Set();
Set _polygons=Set();
谷歌地图;
摄像机定位=
摄像机位置(目标:LatLng(13.092191,80.246994),倾斜:0,缩放:14);
@凌驾
小部件构建(构建上下文){
地图=谷歌地图(
mapType:mapType.hybrid,
多边形:_多边形,
标记:_标记,
initialCameraPosition:_kGooglePlex,
onMapCreated:(谷歌地图控制器){
_控制器。完成(控制器);
添加标记(纬度、经度);
},
onTap:_addPolygon,
);
归还新脚手架(
主体:地图,
);
}
列表多点=列表();
_添加多边形(板条点){
断言(点!=null);
多点。添加(点);
如果(多点长度>4){
打印(“称为多边形”);
印刷品(多点);
设置状态(){
_多边形。添加(多边形)(
polygonId:polygonId(“测试”),
要点:多点,
strokeColor:Colors.blue);
});
多点清除();
}
}
空添加标记(板条标记){
设置状态(){
_标记。添加(标记)(
//此标记id可以是唯一标识每个标记的任何内容。
markerId:markerId('title'),
职位:mLatLng,
信息窗口:信息窗口(
标题:“某物”,
片段:“some desc”,
),
图标:BitmapDescriptor.defaultMarker);
});
}
Future\u getLocation()异步{
试一试{
currentLocation=等待位置。getLocation();
}捕获(e){
如果(e.code=='权限被拒绝'){
打印(“拒绝许可”);
}
}
返回当前位置;
}
}

经过这么长时间,我似乎找到了自己问题的答案

问题似乎在于多点

它在UI中呈现多边形之前清除多点,因此引发了一个我没有注意到的异常