Flutter firebase 数据库迭代项目

Posted

技术标签:

【中文标题】Flutter firebase 数据库迭代项目【英文标题】:Flutter firebase database iterate over items 【发布时间】:2018-11-12 02:27:24 【问题描述】:

我想知道如何从 Flutter 上的路径中获取对象列表,这是我获取一个对象并且工作正常的方法:

static Future<Year> getYear(
  String yearKey) async 
Completer<Year> completer = new Completer<Year>();

FirebaseDatabase.instance
    .reference()
    .child("year")
    .child(yearKey)
    .once()
    .then((DataSnapshot snapshot) 

  var year = new Year.fromJson(snapshot.key, snapshot.value);

  completer.complete(year);
);

return completer.future;

现在我正在尝试以这种方式获取同一路径中所有年份的列表,但不知道如何迭代项目:

static Future<List<Year>> getYears() async 
    Completer<List<Year>> completer = new Completer<List<Year>>();

    List<Year> years = new List<Year>();

    FirebaseDatabase.instance
        .reference()
        .child("year")
        .once()
        .then((DataSnapshot snapshot) 

        //how to iterate over the items here?

      completer.complete(years);
    );

    return completer.future;
  

请有人帮助我。

【问题讨论】:

这取决于你的数据库是结构化的 您已经在使用 .then((DataSnapshot snapshot) //这就是您正在迭代的区域完成每个项目 completer.complete(years); ); 没有 vinoth,缺少将项目添加到列表中,我不知道如何从快照中获取项目并放入列表中。 【参考方案1】:

我得到了这个工作,对于有同样问题的人:

static Future<List<Year>> getYears() async 
    Completer<List<Year>> completer = new Completer<List<Year>>();

    List<Year> years = new List<Year>();

    FirebaseDatabase.instance
        .reference()
        .child("year")
        .once()
        .then((DataSnapshot snapshot) 
          //here i iterate and create the list of objects
          Map<dynamic, dynamic> yearMap = snapshot.value;
          yearMap.forEach((key, value) 
            years.add(Year.fromJson(key, value));
          );

      completer.complete(years);
    );

    return completer.future;
  

这是年份代码:

class Year
  String key;
  String name;

  Year(this.name);

  Year.fromJson(this.key, Map data)
    name = data['name'];
    if(name == null)
      name = '';
    
  

谢谢大家。

【讨论】:

以上是关于Flutter firebase 数据库迭代项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter Web 项目中设置 Firebase 功能

将多个firebase项目添加到一个flutter(android部分)项目中

Flutter:一个应用程序中有多个firebase项目,但显示的数据不正确

升级到 Flutter 2.0 会破坏 Flutter Firebase Web 项目

使用flutter如何在同一个App中使用多个firebase实时数据库

Flutter 和 Firebase:从 Firebase 中的数组中删除项目(地图)