Маркер Карт Google не отображается из Firebase - PullRequest
0 голосов
/ 12 июня 2019

Маркеры GoogleMaps не отображаются после того, как я запрашиваю Firebase, где координаты местоположения хранятся в виде геопоинт (широта и долгота) под «маркерами» коллекции.

Я следил за журналом изменений в плагине Flutter GoogleMaps, где маркеры гдесделано как собственный виджет, без какого-либо успеха.Я подключаюсь к базе данных с помощью Firebase.instance и запрашиваю через «маркеры».Циклы for пытаются вернуть соответствующую информацию.populateClients и initMarkers - это методы, которые создаются для добавления маркеров на карту, используя процесс, описанный в недавнем обновлении маркеров GoogleMaps.

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

 class FirstScreen extends StatefulWidget {
  const FirstScreen({Key key}) : super(key: key);

  @override
  State<FirstScreen> createState() => _FirstScreen();
 }

    class _FirstScreen extends State<FirstScreen> {
   GoogleMapController mapController;

  var currentLocation;

  var clients = [];

   Map<MarkerId, Marker> markers = <MarkerId, Marker>{};

  @override
  void initState(){
    super.initState();
    populateClients();
    Geolocator().getCurrentPosition().then((currloc){
    setState(() {
     currentLocation = currloc;
      });
    });
  }


  populateClients() {

    Firestore.instance.collection('markers').getDocuments().then((docs)    
 {
      if(docs.documents.isNotEmpty) {
        for(int i = 0; i < docs.documents.length; i++) {
         //clients.add(docs.documents[i].data);
         initMarker(docs.documents[i].data,     
  docs.documents[i].documentID);
           }
         }
      });
    }

  void initMarker(client, markerRef) {
       var markerIDVal = markerRef;
      final MarkerId markerId = MarkerId(markerIDVal);

       //new marker

      final Marker marker = Marker(
        position: LatLng(client['location'].latitude,   
 client['location'].longitude),
        markerId: markerId,
      );

      setState(() {
        // adding a new marker to map
        markers[markerId] = marker;
     });
 }

  @override
    Widget build(BuildContext context) {
    return currentLocation == null ? Container(
  alignment: Alignment.center,
  child: Center(
    child: CircularProgressIndicator(),
  ),
):
Stack(
  children: <Widget>[
    GoogleMap(
      initialCameraPosition:
      CameraPosition(target: LatLng(currentLocation.latitude,
          currentLocation.longitude), zoom: 17),
      onMapCreated: _onMapCreated,
      myLocationEnabled: true,
      mapType: MapType.normal,
      markers: Set<Marker>.of(markers.values),
    ),
  ],
);
  }



  void _onMapCreated(GoogleMapController controller) {
   setState(() {
      mapController = controller;
    });
  }


 }

Маркеры будут отображаться на точках геолокации, которые хранятся вFirebase.

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