Reputation: 135
I am trying to make markers appear on google maps flutter plugin but i dont know what i am doing wrong.
I dont get an error, not one that i can see.
I am using google maps flutter plugin and cloud firestore, this is how i have the data in the cloud firestore:
Here is the code:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() => runApp(Lugares());
class Lugares extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Lugares',
home: MapSample(),
debugShowCheckedModeBanner: false,
);
}
}
class MapSample extends StatefulWidget {
@override
State<MapSample> createState() => MapSampleState();
}
class MapSampleState extends State<MapSample> {
final Firestore _database = Firestore.instance;
Completer<GoogleMapController> _controller = Completer();
Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
crearmarcadores(){
_database.collection('Lugares')
.where('tipo', isEqualTo: 'café')
.where('tipo', isEqualTo: 'negocio')
.where('tipo', isEqualTo: 'parque')
.where('tipo', isEqualTo: 'peluqueria')
.where('tipo', isEqualTo: 'plaza')
.where('tipo', isEqualTo: 'restaurant')
.where('tipo', isEqualTo: 'tienda')
.getDocuments().then((docs) {
if(docs.documents.isNotEmpty){
for(int i= 0; i < docs.documents.length; i++) {
initMarker(docs.documents[i].data, docs.documents[i].documentID);
}
}
});
}
void initMarker(lugar, lugaresid) {
var markerIdVal = lugaresid;
final MarkerId markerId = MarkerId(markerIdVal);
// creating a new MARKER
final Marker marker = Marker(
markerId: markerId,
position: LatLng(lugar['Latitud'], lugar['Longitud']),
infoWindow: InfoWindow(title: lugar['Lugar'], snippet: lugar['tipo']),
);
setState(() {
// adding a new marker to map
markers[markerId] = marker;
});
}
static final CameraPosition _kGooglePlex = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
);
@override
Widget build(BuildContext context) {
return new Scaffold(
body: GoogleMap(
mapType: MapType.hybrid,
initialCameraPosition: _kGooglePlex,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
myLocationEnabled: true,
markers: Set<Marker>.of(markers.values),
),
floatingActionButton: FloatingActionButton.extended(
onPressed: _currentLocation,
label: Text('Ir a mi Ubicacion!'),
icon: Icon(Icons.location_on),
),
);
}
void _currentLocation() async {
final GoogleMapController controller = await _controller.future;
LocationData currentLocation;
var location = new Location();
try {
currentLocation = await location.getLocation();
} on Exception {
currentLocation = null;
}
controller.animateCamera(CameraUpdate.newCameraPosition(
CameraPosition(
bearing: 0,
target: LatLng(currentLocation.latitude, currentLocation.longitude),
zoom: 17.0,
),
));
}
}
Hope some one could tell me what i am missing.
Upvotes: 0
Views: 4290
Reputation: 506
Try removing the where clauses in your Firestone query. It seems like you're trying to apply them as OR logic, but chained where clauses acts as AND. This would result in an empty data list and your markers not showing up.
Upvotes: 0
Reputation: 2142
you are not calling the function name crearmarcadores()
that can be the first problem.
may be you can call in initState
method like followed code:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
void main() => runApp(Lugares());
class Lugares extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Lugares',
home: MapSample(),
debugShowCheckedModeBanner: false,
);
}
}
class MapSample extends StatefulWidget {
@override
State<MapSample> createState() => MapSampleState();
}
class MapSampleState extends State<MapSample> {
final Firestore _database = Firestore.instance;
Completer<GoogleMapController> _controller = Completer();
Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
@override
void initState(){
crearmarcadores();
super.initState();
}
crearmarcadores(){
_database.collection('Lugares')
.where('tipo', isEqualTo: 'café')
.where('tipo', isEqualTo: 'negocio')
.where('tipo', isEqualTo: 'parque')
.where('tipo', isEqualTo: 'peluqueria')
.where('tipo', isEqualTo: 'plaza')
.where('tipo', isEqualTo: 'restaurant')
.where('tipo', isEqualTo: 'tienda')
.getDocuments().then((docs) {
if(docs.documents.isNotEmpty){
for(int i= 0; i < docs.documents.length; i++) {
initMarker(docs.documents[i].data, docs.documents[i].documentID);
}
}
});
}
void initMarker(lugar, lugaresid) {
var markerIdVal = lugaresid;
final MarkerId markerId = MarkerId(markerIdVal);
// creating a new MARKER
final Marker marker = Marker(
markerId: markerId,
position: LatLng(lugar['Latitud'], lugar['Longitud']),
infoWindow: InfoWindow(title: lugar['Lugar'], snippet: lugar['tipo']),
);
setState(() {
// adding a new marker to map
markers[markerId] = marker;
});
}
static final CameraPosition _kGooglePlex = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
);
@override
Widget build(BuildContext context) {
return new Scaffold(
body: GoogleMap(
mapType: MapType.hybrid,
initialCameraPosition: _kGooglePlex,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
myLocationEnabled: true,
markers: Set<Marker>.of(markers.values),
),
floatingActionButton: FloatingActionButton.extended(
onPressed: _currentLocation,
label: Text('Ir a mi Ubicacion!'),
icon: Icon(Icons.location_on),
),
);
}
void _currentLocation() async {
final GoogleMapController controller = await _controller.future;
LocationData currentLocation;
var location = new Location();
try {
currentLocation = await location.getLocation();
} on Exception {
currentLocation = null;
}
controller.animateCamera(CameraUpdate.newCameraPosition(
CameraPosition(
bearing: 0,
target: LatLng(currentLocation.latitude, currentLocation.longitude),
zoom: 17.0,
),
));
}
}
Upvotes: 2