Google maps 颤振贴图,设置状态不更新标记和多边形
在初始化贴图时直接给定标记和多边形似乎可以工作,但在调用setState方法时不会添加多边形和标记 我不知道我错过了什么 以下是我到目前为止所做的尝试 有没有人能帮我解决我遗漏的问题,因为地图没有更新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
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中呈现多边形之前清除多点,因此引发了一个我没有注意到的异常