You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:42:05