更新 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));
这是一种解决方法,但确实有效!
我正在 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));
这是一种解决方法,但确实有效!