Как напечатать несколько маркеров google map api 0.5.7 Flutter - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь использовать Google Map API последней версии (0.5.7), но на моей карте напечатан только один маркер, но есть много маркеров в базе данных, и он работал хорошо, прежде чем я попытался поставить последнийверсия.Кто-нибудь знает, как печатать много маркеров?Я положил стрелку туда, где используются маркеры.

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

import 'package:location/location.dart';

import 'package:geoflutterfire/geoflutterfire.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:rxdart/rxdart.dart';
import 'dart:async';
import 'package:intl/intl.dart';

import 'customs_icons_icons.dart';
import 'Dialogs.dart';
import 'Metro.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
          body: FireMap(),
        ));
  }
}

class FireMap extends StatefulWidget {
  State createState() => FireMapState();
}

class FireMapState extends State<FireMap> {
  GoogleMapController mapController;
  Location location = new Location();
  Dialogs dialogs = new Dialogs();
  Firestore firestore = Firestore.instance;
  Geoflutterfire geo = Geoflutterfire();

  BehaviorSubject<double> radius = BehaviorSubject(seedValue: 100.0);
  Stream<dynamic> query;

  StreamSubscription subscription;`enter code here`

  Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
  MarkerId selectedMarker;
  int _markerIdCounter = 1;

  build(context) {
    return Stack(children: [
      GoogleMap(
        initialCameraPosition:
            CameraPosition(target: LatLng(45.758077, 4.833316), zoom: 15),
        onMapCreated: _onMapCreated,
        myLocationEnabled: true,
        mapType: MapType.normal,
        compassEnabled: true,
        markers: Set<Marker>.of(markers.values),<---
      ),
      Positioned(
        bottom: 20,
        right: 20,
        child: Container(
          height: 80.0,
          width: 80.0,
          child: FittedBox(
            child: FloatingActionButton(
              child: Icon(CustomsIcons.ticket, color: Colors.black),
              backgroundColor: Colors.pink[200],
              onPressed: () => dialogs.information(
                  context, 'Confirmer ?', 'description', addGeoPoint),
            ),
          ),
        ),
      ),
    ]);
  }

  _onMapCreated(GoogleMapController controller) {
    _startQuery();
   setState(
      () {
        mapController = controller;
      },
    );
  }


  void _updateMarkers(List<DocumentSnapshot> documentList) { <---
    final String markerIdVal = 'marker_id_$_markerIdCounter';
    _markerIdCounter++;
    final MarkerId markerId = MarkerId(markerIdVal);
    print(documentList);
    markers.clear();
    documentList.forEach(
      (DocumentSnapshot document) {
        GeoPoint pos = document.data['position']['geopoint'];
        var marker = Marker(
            markerId: markerId,
            position: LatLng(pos.latitude, pos.longitude),
            icon: BitmapDescriptor.fromAsset('assets/ticket_point.png'),
            infoWindow:
                InfoWindow(title: 'Ici à :', snippet: document.data['time']));
        setState(() {
          markers[markerId] = marker;
        });
      },
    );
  }

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Работает! Я просто переместил markerIDcounter в «(DocumentSnapshot document)», и все маркеры отображаются

0 голосов
/ 23 апреля 2019

Я делаю это так

class _MapActivityState extends State<MapActivity> {
  GoogleMapController _controller;
  static LatLng _center = LatLng(0.0, 0.0);
  Position currentLocation;
  Set<Marker> _markers = {};

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

  @override
  void initState() {
    super.initState();
    setState(() {
      getUserLocation();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomPadding: false,
      appBar: AppBar(
        title: Text("Home"),
      ),
      body: Stack(
        children: <Widget>[
          GoogleMap(
            onMapCreated: _onMapCreated,
            initialCameraPosition: CameraPosition(target: _center, zoom: 15),
            markers: _markers,
          ),
        ],
      ),
    );
  }
 getUserLocation() async {
    currentLocation = await locateUser();
    setState(() {
      for (int i = 0; i < myresponse.data.length; i++) {
        _markers.add(Marker(
            markerId: MarkerId(myresponse[i].userId),
            position: LatLng(double.parse(myresponse[i].latitude),
                double.parse(myresponse[i].longitude)),
            icon: myresponse[i].capacity.contains("7.2")
                ? BitmapDescriptor.fromAsset(
                    'assets/charger_location.png',
                  )
                : BitmapDescriptor.fromAsset(
                    'assets/marker_green.png',
                  ),
            infoWindow: InfoWindow(
                title: myresponse[i].stationName,
                snippet: myresponse[i].contactPerson,
                onTap: () => _onTap(myresponse[i]))));
      }
    });
 }
}
...