Why am i getting "NoSuchErrorMethod:the method 'toJson' was called on null, Receiver: null Tried calling: toJson()"

Viewed 155
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,

How to retrive my markers from Firestore to Google Map?

0 Answers
Related