android 无法无条件调用方法“[]”,因为接收方可以为“null”,错误

ufj5ltwl  于 2023-01-28  发布在  Android
关注(0)|答案(2)|浏览(146)

我做了一个无人机应用程序。我从flutter开发应用程序。但我新学会了flutter。我的目的是使用firebase实时和flutter_map和看到无人机的位置。但我没有解决这个错误。请帮助我项目代码;

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(),
    );
  }
}

当我改变数值时 在firebase中,我希望将其反映到应用程序中的位置。

z31licg0

z31licg01#

你可以得到更好的答案,如果你说你得到的错误,并粘贴构建方法。唯一的想法,我知道你的代码是,initState只运行一次,当页面包含的小部件显示,如果_getCurrentLocation()是不是在构建方法,你的小部件将永远不会更新。我想帮助更多,但我不知道firebase。

sc4hvdpw

sc4hvdpw2#

可能是因为event.snapshot.value[“Lat”]可以为空,而LatLng类示例不为空。您可以通过添加_currentLocation = LatLng(event.snapshot.value?["Lat"] ?? 0, event.snapshot.value["Lng"] ?? 0);来修复此问题

**??是一个可识别空值的运算符,该表达式表示,如果首选项示例中的event.snapshot.value?[“Lat”]**的值为空值,则将默认值(0)分配给LatLng类。

相关问题