我有这样的东西
void onMapCreated(GoogleMapController controller) {
setState(() {
mapController = controller;
for (int i = 0; i < list.length; i++) {
var corte = list[0].keys.elementAt(i).split('/');
list.forEach((coords) {
mapController.addMarker(MarkerOptions(
position: LatLng(coords.values.elementAt(i).latitude,
coords.values.elementAt(i).longitude),
icon: BitmapDescriptor.defaultMarkerWithHue(corte[1] == "tipo:0"
? BitmapDescriptor.hueRed
: corte[1] == "tipo:4"
? BitmapDescriptor.hueBlue
: corte[1] == "tipo:3"
? BitmapDescriptor.hueGreen
: corte[1] == "tipo:2"
? BitmapDescriptor.hueYellow
: null),
infoWindowText: InfoWindowText(corte[0], 'Ver')));
});
}
});
}
我需要在信息窗口文本中创建一个“导航推送”(如 href)。有人知道这样做的正确方法是什么吗?
---更新---
我在这里阅读https://github.com/flutter/flutter/issues/24864一种将 id 设置为标记的方法。我尝试此代码但返回
No setter named 'id' in class 'Marker'.
void onMapCreated(GoogleMapController controller) {
setState(() {
mapController = controller;
for (int i = 0; i < list.length; i++) {
var corte = list[0].keys.elementAt(i).split('/');
mapController.addMarker(MarkerOptions(
position: LatLng(list[0].values.elementAt(i).latitude, list[0].values.elementAt(i).longitude),
icon: BitmapDescriptor.defaultMarkerWithHue(
corte[1] == "tipo:0"
? BitmapDescriptor.hueRed
: corte[1] == "tipo:4"
? BitmapDescriptor.hueBlue
: corte[1] == "tipo:3"
? BitmapDescriptor.hueGreen
: corte[1] == "tipo:2"
? BitmapDescriptor.hueYellow
: null),
infoWindowText: InfoWindowText(corte[0], 'Ver'))).then((marker){
marker.id=corte[2];
});
mapController.onInfoWindowTapped.add((marker) {
print(marker.id);
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => corte[1] == "tipo:0"
? new MeterDetailsChartPage(
elemento: metersDetails[int.parse(marker.id)],
estate: this.estate,
parcela: widget.parcela)
: corte[1] == "tipo:4"
? new ValvePage(
elemento: valvesDetails[int.parse(marker.id)],
estate: this.estate,
parcela: widget.parcela)
: corte[1] == "tipo:3"
? new RelePage(
elemento: relesDetails[int.parse(marker.id)],
estate: this.estate,
parcela: widget.parcela)
: corte[1] == "tipo:2"
? new SensorPage(
elemento: sensorsDetails[int.parse(marker.id)],
estate: this.estate,
parcela: widget.parcela)
: null)
);
});
}
});
}
最佳答案
在州级创建 map 变量:
Map<String,String> markerMap;
并修改你的方法:
void onMapCreated(GoogleMapController controller) async {
setState(() {
mapController = controller;
markerMap = Map();
for (int i = 0; i < list.length; i++) {
var corte = list[0].keys.elementAt(i).split('/');
Marker marker = await mapController.addMarker(MarkerOptions(
position: LatLng(list[0].values.elementAt(i).latitude, list[0].values.elementAt(i).longitude),
icon: BitmapDescriptor.defaultMarkerWithHue(
corte[1] == "tipo:0"
? BitmapDescriptor.hueRed
: corte[1] == "tipo:4"
? BitmapDescriptor.hueBlue
: corte[1] == "tipo:3"
? BitmapDescriptor.hueGreen
: corte[1] == "tipo:2"
? BitmapDescriptor.hueYellow
: null),
infoWindowText: InfoWindowText(corte[0], 'Ver')));
markerMap[marker.id] = corte[2];
mapController.onInfoWindowTapped.add((marker) {
final corte2 = markerMap[marker.id];
Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => corte[1] == "tipo:0"
? new MeterDetailsChartPage(
elemento: metersDetails[int.parse(corte2)],
estate: this.estate,
parcela: widget.parcela)
: corte[1] == "tipo:4"
? new ValvePage(
elemento: valvesDetails[int.parse(corte2)],
estate: this.estate,
parcela: widget.parcela)
: corte[1] == "tipo:3"
? new RelePage(
elemento: relesDetails[int.parse(corte2)],
estate: this.estate,
parcela: widget.parcela)
: corte[1] == "tipo:2"
? new SensorPage(
elemento: sensorsDetails[int.parse(corte2)],
estate: this.estate,
parcela: widget.parcela)
: null)
);
});
}
});
}
);
关于google-maps - Flutter - 导航器插入 infoWindowText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790414/