google-maps - Flutter - 导航器插入 infoWindowText

标签 google-maps flutter

我有这样的东西

 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/

相关文章:

javascript - Google map V3 标记管理器

flutter - 如何根据dartlang中的扩展类设置类型定义

android - 当按下后退按钮销毁应用程序时,Flutter Android Platform EventChannel 不会停止

ios - 如果用户在 mkmapview 中选择 "Dont Allow",如何要求用户输入位置或硬编码纬度/经度对?

Flutter Firebase 电话身份验证不发送短信代码。直接调用 PhoneCodeAutoRetrievalTimeout 方法。这是我的代码

flutter - 如何防止 AlertDialog 不通过点击外部关闭?

flutter - CircularProgressIndicator 不会停止

java - 将 Google Maps 嵌入 JavaFX 2.2 桌面应用程序抛出异常并且通常不执行

c# - 实时更新 map - 计时器类 - c#

css - Google Maps API 在 Safari 中杀死 CSS 动画