为何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
相关产品推荐
相关产品推荐

