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

为何Map<String, dynamic>.from转换时提示‘Event不是类型’?附StreamBuilder代码

解决StreamBuilder中"Event不是类型"的错误

错误原因

你使用的是新版Firebase Realtime Database SDK(firebase_database: ^10.0.0+),该版本已将原有的Event类重命名为DatabaseEvent,直接强制转换为Event会触发类型不匹配错误。

修复后的完整代码

StreamBuilder(
  stream: reffVehicles.child('users').orderByKey().limitToLast(10).onValue,
  builder: (context, snapshot) {
    final listtiles = <ListTile>[];
    if (snapshot.hasData) {
      // 转换为新版SDK的DatabaseEvent类型
      final databaseEvent = snapshot.data! as DatabaseEvent;
      // 处理value可能为null的情况,避免空指针异常
      final vehicles = Map<String, dynamic>.from(
        (databaseEvent.snapshot.value as Map?) ?? {}
      );
      
      vehicles.forEach((key, value) {
        final nextVehicle = Map<String, dynamic>.from(value);
        final vehicletile = ListTile(
          title: Text(nextVehicle['car_name'].toString())
        );
        listtiles.add(vehicletile);
      });
    }
    return ListView(
      children: listtiles,
    );
  },
)

关键修复点

  • 类型替换:将Event替换为DatabaseEvent,适配新版SDK的API规范。
  • 空安全兜底:在转换value时增加?? {},防止目标节点无数据时value为null导致的转换失败。
  • 依赖版本确认:确保pubspec.yaml中firebase_database依赖为最新稳定版,避免新旧API混用引发冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:52:11