firebase - 如何从地图对象 Firebase (Flutter) 中获取数据
问题描述
我的类映射有一个小问题......我正在为我的颤振应用程序使用firecloud(NoSql DB),但是我在检索我的数据时遇到了很多问题!
这是我的会议课程,其中包含所有数据,我可以获取所有数据,但 List _Tags 和 List _Users 存在一些问题。我怎样才能映射并正确获取这些数据????
class Meeting{
userIcon newUserIcon;
User newUser;
String newtag;
String _ID;
String _Name;
String _Date;
String _Position;
String _Image;
String _Hour;
List<String> _Tags;
List<userIcon> _Users;
String _Description;
User _Manager;
bool _Favorite;
Meeting(this._ID,this._Name,this._Date,this._Position,this._Image,this._Hour,this._Tags,this._Users,this._Description,this._Manager,this._Favorite);
Meeting.fromMap(Map<String, dynamic> map){
this._ID = map['ID'];
this._Name = map['nome'];
this._Date= map['data'];
this._Position= map['posizione'];
this._Image= map['immagine'];
this._Hour= map['data'];
this._Tags= map['tags'].cast<String>(); //creo la lista di scringhe
this._Users= map['id_partecipanti'].forEach((element){
newUserIcon = new userIcon.fromMap(element);
});
this._Description = map['descrizione'];
this._Manager = new User.fromMap(map['id_organizzatore']);
this._Favorite = map['preferito'];
}
Meeting.map(dynamic obj) {
this._ID = obj['ID'];
this._Name = obj['Name'];
this._Date= obj['Date'];
this._Position= obj['Position'];
this._Image= obj['Image'];
this._Hour= obj['Hour'];
this._Tags= obj['Tags'];
this._Users= obj['Users'];
this._Description = obj['Description'];
this._Manager = obj['Manager'];
this._Favorite = obj['Favorite'];
}
String get ID => this._ID;
String get Name => _Name;
String get Date => _Date;
String get Position=> _Position;
String get Image => _Image;
String get Hour => _Hour;
List<String> get Tags => _Tags;
List<userIcon> get Users=> _Users;
String get Description => _Description;
User get Manager => _Manager;
bool get Favorite => _Favorite;
Map<String, dynamic> toMap() {
var map =new Map<String, dynamic>();
if(ID != null){
map["ID"] = ID;
}
map["ID"] = ID;
map["Name"] = Name;
map["Date"] = Date;
map["Position"] = Position;
map["Image"] = Image;
map["Hour"] = Hour;
map["Tags"] = Tags;
map["Users"] = Users;
map["Description"] = Description;
map["Manager"] = Manager;
map["Favorite"] = Favorite;
return map;
}
}
这是 userIcon 类
class userIcon{
String _ID;
String _immagine;
int _eta;
userIcon(this._ID,this._immagine,this._eta);
userIcon.map(dynamic obj) {
this._ID = obj['ID'];
this._immagine = obj['immagine'];
this._eta = obj['eta'];
}
String get ID => this._ID;
String get immagine => this._immagine;
int get eta => this._eta;
Map<String, dynamic> toMap() {
var map =new Map<String, dynamic>();
if(ID != null){
map["ID"] = ID;
}
map["immagine"] = immagine;
map["eta"] = eta;
return map;
}
userIcon.fromMap(Map<String, dynamic> map){
this._ID = map['ID'];
this._immagine=map["immagine"];
this._eta=map["eta"];
}
}
这是 Firecloud 查询 /map :
Future<List<Meeting>> getData() async {
List<Meeting> _incontri = [];
List<DocumentSnapshot> _temp =[];
Query q = databaseReference.collection("incontri").limit(10);
QuerySnapshot querySnapshot = await q.getDocuments();
_temp = querySnapshot.documents;
_incontri = _temp.map(
(doc) => Meeting.fromMap(doc.data)).toList();
return _incontri;
}
我找不到有关此问题的任何文档或任何其他帖子...有人可以帮助我:)?如果您知道一些我可以阅读有关地图并学到一些东西的文章,我将不胜感激!谢谢!
解决方案
Meeting._Users 没有被填充,因为您使用的是不返回 List 的 List.forEach,您应该使用List.map ,然后使用 toList 将返回的Iterable转换为 List 。
您正在使用List.cast进行一些类型转换并获取 Meeting._Tags。根据您提供的信息,很难判断问题是map['tags']
不是正确的类型,还是您遇到了其他问题。
如果您不想手动处理 JSON <-> 模型转换,我建议您使用json_serializable 之类的代码生成工具。这里是来自 flutter.dev关于使用 json_serializable 的参考。
推荐阅读
- java - 如何使用 @ManyToMany 审核 @JoinTable
- c# - Xamarin.Froms - 在视图模型构造函数中实例化 2 个服务
- c++ - 如何让 GCC 使用不同的标准库?
- java - ffmpeg unbale 在某些情况下初始化线程
- makefile - 如何使用make并行构建特定的多个目标?
- java - 如何读取 csv 文本文件,以便将 csv 文件中的特定值与用户输入进行比较?
- java - NavigationDrawer 不能强制转换为接口
- react-native - 当当前选项卡在反应导航5中处于活动状态时如何在底部选项卡顶部添加一行
- vmware - 从 vSphere 客户端获取数据
- javascript - 如何在 Puppeteer 中双击