import 'package:flutter/material.dart';
import 'package:geoflutterfire/geoflutterfire.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geocoding/geocoding.dart';
import 'package:cloud_functions/cloud_functions.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:geolocator/geolocator.dart';
class HomePage extends StatefulWidget {
const HomePage({Key key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
//final firestoreInstance = FirebaseFirestore.instance;
final geo = Geoflutterfire();
GeoFirePoint myLocation;
LatLng _initialPosition = LatLng(13, 77.583333);
GoogleMapController _controller;
Stream<List<DocumentSnapshot>> stream;
var _location;
String searchAddress;
List<Marker> markers1 = [];
Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
BitmapDescriptor pinLocationIcon;
void _onMapCreated(GoogleMapController _contrl) {
_controller = _contrl;
/*stream.listen((List<DocumentSnapshot> documentList) {
_updateMarkers(documentList);
});*/
_location.onLocationChanged.listen((l) {
_controller.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(target: LatLng(l.latitude, l.longitude), zoom: 15),
),
);
});
}
@override
void initState() {
// TODO: implement initState
populateClients();
super.initState();
}
populateClients() {
FirebaseFirestore.instance.collection('markers').get().then((docs) {
if (docs.docs.isNotEmpty) {
for (int i = 0; i < docs.docs.length; ++i) {
initMarker(docs.docs[i].data(), docs.docs[i].id);
}
}
});
}
void initMarker(request, requestId) {
var markerIdVal = requestId;
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position:
LatLng(request['location'].latitude, request['location'].longitude),
icon: pinLocationIcon,
);
setState(() {
markers[markerId] = marker;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition:
CameraPosition(target: _initialPosition, zoom: 10),
onMapCreated: _onMapCreated,
myLocationEnabled: true,
markers: Set<Marker>.of(markers.values),
),
Positioned(
top: 30.0,
right: 15.0,
left: 15.0,
child: Container(
height: 50.0,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Colors.white,
),
child: TextField(
decoration: InputDecoration(
hintText: 'Enter Address',
border: InputBorder.none,
contentPadding: EdgeInsets.only(left: 15.0, top: 15.0),
suffixIcon: IconButton(
icon: Icon(Icons.search),
onPressed: searchAndNavigate,
iconSize: 20,
),
),
onChanged: (val) {
setState(() {
searchAddress = val;
});
},
),
),
),
searchAndNavigate() {
locationFromAddress(searchAddress).then((result) {
myLocation = geo.point(
latitude: result[0].latitude, longitude: result[0].longitude);
double lat = result[0].latitude;
double lng = result[0].longitude;
var _marker = Marker(
markerId: MarkerId(UniqueKey().toString()),
position: LatLng(lat, lng),
icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueViolet),
);
setState(() {
markers1.add(_marker);
});
_controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
target: LatLng(result[0].latitude, result[0].longitude),
zoom: 10,
)));
});
}
}
This is part of the code responsible for pulling markers from firebase onto my google maps. The whole code allows users to create markers and store them onto firebase, but when I try to implement this I get the error as mentioned in the question. For reference, I was using- https://medium.com/flutter-community/google-maps-in-flutter-ii-260f43db5924,