简体   繁体   中英

The method '[]' can't be unconditionally invoked because the receiver can be 'null'. Error

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.

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM