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 项目