从一个老项目中学习。精确地从真实的时间数据库中检索细节。问题描述是“方法'[]'不能无条件调用,因为接收器可以为null”。
从Firebase的真实的时间数据库中检索细节是我的期望。然而,我学习的代码似乎有点过时了。
这是代码的一部分:
Future<void> retrieveRideRequestInfo(String rideRequestId, BuildContext context) async {
try {
DatabaseReference newRequestsRef = FirebaseDatabase.instance.reference().child("Ride Requests");
DatabaseEvent databaseEvent = await newRequestsRef.child(rideRequestId).once();
final data = databaseEvent.snapshot.value as Map<String, dynamic>;
if (databaseEvent.snapshot.value != null) {
assetsAudioPlayer.open(Audio("sounds/alert.mp3"));
assetsAudioPlayer.play();
RideRequest rideRequest = RideRequest(data);
double pickUpLocationLat = double.parse(databaseEvent.snapshot.value['pickup']['latitude'].toString());
double pickUpLocationLng = double.parse(databaseEvent.snapshot.value['pickup']['longitude'].toString());
String? pickUpAddress = double.parse(databaseEvent.snapshot.value['pickup_address'].toString());
double? dropOffLocationLat = double.parse(databaseEvent.snapshot.value['dropoff']['latitude'].toString());
double? dropOffLocationLng = double.parse(databaseEvent.snapshot.value['dropoff']['longitude'].toString());
String dropOffAddress = double.parse(databaseEvent.snapshot.value['dropoff_address'].toString());
String? paymentMethod = double.parse(databaseEvent.snapshot.value['payment_method'].toString());
字符串
1条答案
按热度按时间5jvtdoz21#
问题就在这里:
字符串
在你检查
databaseEvent.snapshot.value != null
是否正确和你在double.parse(databaseEvent.snapshot.value['pickup']['latitude'].toString())
中使用它的那一刻之间,databaseEvent.snapshot.value
可能会改变值(想想多线程或事件驱动代码)。所以检查并不能帮助防止以后的错误。最简单的修复方法是将值分配给局部变量并对其执行所有操作:
型
检查后
value
突然变为null的风险现在已经消失了,因为它是一个局部变量。