首页 > 解决方案 > 如何从地图对象 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;
}

我找不到有关此问题的任何文档或任何其他帖子...有人可以帮助我:)?如果您知道一些我可以阅读有关地图并学到一些东西的文章,我将不胜感激!谢谢!

标签: firebasedictionaryflutterdart

解决方案


Meeting._Users 没有被填充,因为您使用的是不返回 List 的 List.forEach,您应该使用List.map 然后使用 toList 将返回的Iterable转换为 List 。

您正在使用List.cast进行一些类型转换并获取 Meeting._Tags。根据您提供的信息,很难判断问题是map['tags']不是正确的类型,还是您遇到了其他问题。

如果您不想手动处理 JSON <-> 模型转换,我建议您使用json_serializable 之类的代码生成工具。这里是来自 flutter.dev关于使用 json_serializable 的参考。


推荐阅读