Итерация маркеров Google Flutter maps - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь перебрать маркеры на новой карте флаттера Google .

Я получаю массив координат с помощью веб-службы, затем перебираю элементы и получаю индекс, который имеет широту и долготу.

for (int i = 0; i < list.length; i++) {
 mapController.addMarker(MarkerOptions(position:  list[0].values.elementAt(i)))));
}

И параметры карты.

GoogleMapController mapController;

GoogleMap(
     onMapCreated: (GoogleMapController mapController) {
          mapController = mapController;         
     },
     options: GoogleMapOptions(
          mapType: MapType.satellite,
          myLocationEnabled :true,
          cameraPosition: CameraPosition(
          target: LatLng(40.347022, -3.750381), zoom: 5.0),
    ),
),

Полагаю, что mapController должен принимать координаты, которые я поместил в цикл for, но он не работает. Консоль возвратная

Метод 'addMarker' был вызван для нуля.

Итак, вопрос в том, как я могу динамически добавить несколько маркеров с помощью пакета Google Flutter Map?

Также я попробовал этот простой код и работает, поэтому при добавлении маркеров возникает ошибка.

  GoogleMapController mapController;

    GoogleMap(
                  onMapCreated: (GoogleMapController mapController) {
                    mapController = mapController;
                    mapController.addMarker(MarkerOptions(
                      position:LatLng(40.347022, -3.750381),          
                      infoWindowText: InfoWindowText("Title", "Content"),
                      //icon:
                    ));
                     mapController.addMarker(MarkerOptions(
                      position:LatLng(43.321871, -3.006887),          
                      infoWindowText: InfoWindowText("Title", "Content"),
                      //icon:
                    ));

                  },
                  options: GoogleMapOptions(
                    mapType: MapType.satellite,
                    myLocationEnabled :true,
                    cameraPosition: CameraPosition(
                        target: LatLng(40.347022, -3.750381), zoom: 5.0),
                  ),
                ),

ОБНОВЛЕНИЕ 2

Я нашел этот пример кода. Это именно то, что я хочу, но я не могу повторить этот код, вернуть эту ошибку

https://github.com/gerryhigh/Flutter-Google-Maps-Demo/blob/master/lib/venues.dart

NoSuchMethodError: Получатель 'className' был вызван для нуля.

Ответы [ 4 ]

0 голосов
/ 02 августа 2019

Библиотека была обновлена: так я смог показать несколько маркеров на карте

     Completer<GoogleMapController> _controller = Completer();
         // initial camera position
         CameraPosition _cameraPos;
     // A map of markers
         Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
        // function to generate random ids
        int generateIds() {
              var rng = new Random();
              var randomInt;      
                randomInt = rng.nextInt(100);
                print(rng.nextInt(100));
              return randomInt;
            }

            //call this function in initstate
            buildMarkers() {
                  for (var i = 0; i < gridItem.locations.length; i++) {
                    var markerIdVal = generateIds();
                  final MarkerId markerId = MarkerId(markerIdVal.toString());
                    final Marker marker = Marker(
                  markerId: markerId,
                  position: LatLng(
                   gridItem.locations[i].latitude,
                    gridItem.locations[i].longitude,
                  ),
                  infoWindow: InfoWindow(title: gridItem.locations[i].place, snippet: gridItem.locations[i].region),
                );
// you could do setState here when adding the markers to the Map
                 markers[markerId] = marker;

                  }
                  print("Length:: + ${markers.length}");
                }
    // your Googlemaps Widget somewhere in your widget tree
    GoogleMap(
              mapType: MapType.normal,
              initialCameraPosition: _cameraPos,
              gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>[Factory<OneSequenceGestureRecognizer>(()=>ScaleGestureRecognizer())].toSet(),
              markers: Set<Marker>.of(markers.values),
              onMapCreated: (GoogleMapController controller) {
                             _controller.complete(controller);}),
0 голосов
/ 15 февраля 2019

Я вызываю экземпляр карт Google в основной функции сборки. Как это:

return GoogleMap(
  onMapCreated: _onMapCreated,
  options: GoogleMapOptions(
    cameraPosition: CameraPosition(
      target: _center1,
      zoom: 11.0,
    ),
  ),
);

Внутри функции _onMapCreated находится итератор:

widget.model.allItems.forEach((item) {
  //print("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
  print(item.lat);

  var newItem = LatLng(double.parse(item.lat), double.parse(item.lon));
  mapController.addMarker(
    MarkerOptions(
      icon: BitmapDescriptor.fromAsset(assetName),
      position: newItem,
    ),
  );
});

Это работает для меня.

0 голосов
/ 04 марта 2019
void populateOrder(Item item) async {
if (item != null) {
  for (int i = 0; i < item.feature.length; i++) {
    var position = item.feature[i];
    if (position != null) {
      try {
        if (double.parse(position.latitude) != null &&
            double.parse(position.longitude) != null) {
           mapController.clearMarkers().then((value){
             mapController.addMarker(
              MarkerOptions(
                position: LatLng(double.parse(position.latitude),
                    double.parse(position.longitude)),
                infoWindowText: InfoWindowText(position.schet, ""),
                icon: BitmapDescriptor.defaultMarker,
              ),
            );
          });
        }
      } catch (e) {
        print(e);
      }
    }
  }
}

}

void _onMapCreated(GoogleMapController controller) {
mapController = controller;
populateOrder(itemize);
Future.delayed(Duration(seconds: 6));

}

0 голосов
/ 07 января 2019

В первом примере GoogleMapController paramater и ваша локальная переменная имеют одно и то же имя, поэтому в основном локальная переменная становится затененной, и вы присваиваете значение параметра функции для себя. Переименование одного из этих двух должно решить проблему.

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