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

旧Flutter代码适配最新版本:Firebase Realtime Database读取问题

解决方案:Firebase Realtime Database 数据读取兼容 Flutter 新版本

针对你遇到的两个错误,修复思路如下:

错误1修复:适配once()方法的返回类型变更

新版本Firebase Realtime SDK中,once()方法不再直接返回DataSnapshot,而是返回包含快照的DatabaseEvent对象,需要从事件中提取snapshot来获取数据。

错误2修复:处理dataSnapshot.value的类型问题

dataSnapshot.value现在的类型是Object?,无法直接调用forEach,需要先将其强制转换为Map<String, dynamic>(你的数据结构是键值对形式,符合Map类型)。

修改后的完整代码:

return await dbReference
    .orderByChild(AppDatabase._speciesCommonName)
    .startAt(prefix)
    .endAt('$prefix\uf8ff')
    .once()
    .then((DatabaseEvent event) {
  final DataSnapshot dataSnapshot = event.snapshot;
  // 校验数据存在且为Map类型
  if (dataSnapshot.value != null && dataSnapshot.value is Map) {
    (dataSnapshot.value as Map<String, dynamic>).forEach((key, value) {
      String dbKey = key;
      String commonName = value[AppDatabase._speciesCommonName];
      Species obj = Species(dbKey: dbKey, commonName: commonName);
      list.add(obj);
    });
  }
  return list; // 记得返回填充后的列表
});

额外建议:如果你的Species类可以添加一个fromMap构造函数(比如Species.fromMap(String key, Map data)),可以进一步简化对象创建逻辑,提升代码健壮性。

内容的提问来源于stack exchange,提问作者Sid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:32:39