Home > Software engineering >  The method '[]' can't be unconditionally invoked because the receiver can be 'nu
The method '[]' can't be unconditionally invoked because the receiver can be 'nu

Time:01-28

My make a droneapp.I develop app from flutter.But ı new learned to flutter.My purpose is use firebase realtime and flutter_map and see drone location.But i am not solved to this error.Please help me Project Code;


import 'package:google_fonts/google_fonts.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:droneapps/crud.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:droneapps/main.dart';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart' /* as latLng*/;

class MapWidgetW extends StatefulWidget {
  @override
  _MyMapState createState() => _MyMapState();
}

class _MyMapState extends State<MapWidgetW> {
  late LatLng _currentLocation;

  @override
  void initState() {
    super.initState();
    _getCurrentLocation();
  }

  void _getCurrentLocation() {
    final databaseReference = FirebaseDatabase.instance.ref("Location");
    databaseReference.child("Location").onValue.listen((DatabaseEvent event) {
      setState(() {
        _currentLocation =
            LatLng(event.snapshot.value["Lat"], event.snapshot.value["Lng"]);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return FlutterMap(
      options: MapOptions(),
    );
  }
}

When I changed the values ​​in firebase, I wanted to reflect it to the location in the application.

CodePudding user response:

You can get better answers if you say which line you are getting the error, and paste the build method. The only think i know about your code is that the initState run only once when the page that contains the widget show up, if _getCurrentLocation() is not in build method your widget will never update. I would like to help more but i dont know firebase.

CodePudding user response:

Probably because event.snapshot.value["Lat"] can be null and the LatLng class instances are not null. You can fix this by adding _currentLocation = LatLng(event.snapshot.value?["Lat"] ?? 0, event.snapshot.value["Lng"] ?? 0);

?? is a null-aware operator, the expression means that, if the value of event.snapshot.value?["Lat"] in the prefs instance is null then assign an default value (which is 0) to LatLng class.

  • Related