更新 Firebase RTDB 时将对象转换为地图

Casting an Object as a Map when Firebase RTDB is updated

我正在 Firebase RTDB 中进行如下查询:

Future<UsuarioModel> cargarUsuarioEmpresa(String idEmpresa, String idUsuario) async {

  UsuarioModel _usuario = UsuarioModel();     
  Query resp = db.child('PATH/usuarios/$idUsuario');  
  final snapshot = await resp.once(); 
  _usuario = UsuarioModel.fromJson(Map<String, dynamic>.from(snapshot.value));
  return _usuario;

} 

在我将 firebase_database 软件包从 8.0.1 升级到 9.0.3

之前,它一直运行良好

现在,我有一个错误

The getter 'value' isn't defined for the type 'DatabaseEvent'.

然后,我更新了接收 DatabaseEvent 的方法:

  final event = await resp.once();
  _usuario = UsuarioModel.fromJson(Map<String, dynamic>.from(event.snapshot.value));

但是出现错误:

The argument type 'Object?' can't be assigned to the parameter type 'Map<dynamic, dynamic>'.

我尝试添加一个 as 转换:

  _usuario = UsuarioModel.fromJson(Map<String, dynamic>.from(event.snapshot.value as Map<String,dynamic>));

但它不起作用。构建后出现错误:

Unhandled Exception: type '_InternalLinkedHashMap<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>' in type cast

如何正确地将对象映射转换为 Map 来修复错误?

由于版本 9 从动态更改为对象,您可以将快照值定义为动态:

      final event = await resp.once();
      _usuario = UsuarioModel.fromJson(Map<String, dynamic>.from(event.snapshot.value as dynamic));

这是一种解决方法,但确实有效!