Flutter从Firebase加载数据报错:DatabaseEvent无value getter
解决Firebase Realtime Database中"The getter 'value' isn't defined for the type 'DatabaseEvent'"错误
这个错误是因为Firebase Realtime Database SDK版本更新导致的:在新版SDK(9.x及以上)中,once()方法返回的是DatabaseEvent类型对象,而非旧版直接返回的DataSnapshot。你需要先从DatabaseEvent中取出真正的快照对象,再获取数据。
修改后的代码如下:
Future<void> _loadTransactions() async { final year = currentDate.year.toString(); final month = currentDate.month.toString().padLeft(2, '0'); // 获取DatabaseEvent对象 final event = await _databaseReference.child(year).child(month).once(); // 从event中取出DataSnapshot,再获取value final Map<String, dynamic>? data = event.snapshot.value as Map<String, dynamic>?; if (data != null) { final List<Transaction> loadedTransactions = []; data.forEach((key, value) { loadedTransactions.add(Transaction.fromMap(key, value)); }); setState(() { transactions = loadedTransactions; }); } }
核心修改点:
- 调整变量名(将
snapshot改为event),更贴合返回对象的实际类型,提升可读性 - 通过
event.snapshot获取DataSnapshot实例,再访问其value属性 - 对
value添加类型转换(as Map<String, dynamic>?),避免类型推断警告
内容的提问来源于stack exchange,提问作者Deneth Sankalpa
相关产品推荐
相关产品推荐

