Flutter - Навигатор нажимает внутри infoWindowText - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть что-то вроде этого

 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) в информационном окне Text.Кто-нибудь знает, как правильно сделать это?

--- ОБНОВЛЕНИЕ ---

Я прочитал здесь https://github.com/flutter/flutter/issues/24864 способ установитьидентификатор для маркера.Я пытаюсь этот код, но возвращает

Нет сеттера с именем 'id' в классе '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)
                );
          });
        }
      });
    }

1 Ответ

0 голосов
/ 20 февраля 2019

Создайте переменную 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)
                        );
                  });
                }
              });
            }

);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...