flutter - Flutter:解析 Firebase 实时数据库快照以列出
问题描述
我尝试搜索其他问题,但唯一与此类似的问题在JavaScript而不是 Dart/Flutter 中有答案。我正在尝试将我的 Firebase 实时数据库中的列表作为List<BaseModel>
到目前为止,从我在网上搜索的内容来看,我认为结果DataSnapshot
是一个我可以解析的地图,所以我试了一下,但得到了这个错误:List<dynamic>' is not a subtype of type 'Map<dynamic, dynamic>
我的代码:
Future<List<BaseModel>> getList(
{DatabaseReference query, Models modelType}) async {
List<BaseModel> list = new List();
DataSnapshot snap = await query.once();
Map<String, dynamic> json = Map.from(snap.value);
json.forEach((key, value) {
list.add(BaseModel(model: modelType, key: key, snapshot: value));
});
return list;
}
奇怪的是,即使我尝试解析非列表模型,我也会得到同样的错误。
我的数据库结构如下所示:
更新:
基本型号:
abstract class BaseModel {
factory BaseModel({Models model, String key, Map map}) {
switch (model) {
case Models.MyModel:
return MyMod.fromSnapshot(key: key, map: map);
break;
default:
throw ("Not a valid model.");
}
}
}
我的模型:
MyModel.fromSnapshot({String key, Map map}) {
_id = key;
_title = map['title'];
}
我的 Firebase 查询只是数据库参考.child("Root")
解决方案
我找到了解决办法!
我的新代码:
Future<List<BaseModel>> getList({DatabaseReference query, Models modelType}) async {
List<BaseModel> list = new List();
DataSnapshot snap = await query.once();
List<dynamic> resultList = snap.value;
for(var i = 0; i < resultList.length; i++) {
Map<dynamic, dynamic> map = Map.from(resultList[i]);
list.add(BaseModel(model: modelType, key: i.toString(), snapshot: map));
}
return list;
}
假设您从模型的.fromMap(yourMap)
构造函数方法中解析值,这应该可以工作。就像是_title = yourMap['key'];
推荐阅读
- flutter - 我们可以在 VS Code 中打开在 Android Studio 中创建的颤振项目吗?
- qt - 如果隐藏,如何防止 QWidget 调整大小,并在显示小部件后处理相同的调整大小事件?
- mongodb - MongoDB 扩展参考模式 - 管理数据重复
- javascript - 在css中使用剪辑路径的曲线边框
- javascript - 滚动 Reactjs 中的问题列表
- flutter - 例外:不支持的 Android 插件版本:4.1.2
- php - 尝试在 null 上分配属性“parent_id”
- python - python shell与IDLE中元组处理的区别
- c++ - 曲线之间的 3D 插值
- android-management-api - 企业列表调用在 Android 管理 API 中不可用如何在我的 EMM 控制台中实现它?