我有一个Scaffold
与身体:
body: new Column(
children: <Widget>[
new Flexible(
child: new FirebaseAnimatedList(
query: FirebaseDatabase.instance
.reference()
.child('products')
.orderByChild('order'),
padding: new EdgeInsets.all(8.0),
reverse: false,
itemBuilder: (_, DataSnapshot snapshot,
Animation<double> animation, int x) {
return new ProductItem(
snapshot: snapshot, animation: animation);
},
),
),
],
),
但我需要添加一个简单的查询:'Active' = true
有可能吗?怎么样?任何示例/教程?
感谢。
答案 0 :(得分:9)
如果我正确地提出您的问题,您正在尝试查询某些数据(“Active”= true),然后参见以下示例。
我已经从我的数据库中添加了一个屏幕截图,以便在我的数据结构方式上有更多的背景信息,并希望它能让您直观地实现类似的结果。
在上一个示例中,我正在执行以下查询,仅获取设置为“em1@gmail.com”的电子邮件联系人,而忽略其他人。
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text("Firebase Example"),),
body: new Column(
children: <Widget>[
new Flexible(
child: new FirebaseAnimatedList(
query: FirebaseDatabase.instance
.reference().child("contacts")
.orderByChild("email")
.startAt("em1@gmail.com").endAt("em1@gmail.com"),
padding: new EdgeInsets.all(8.0),
reverse: false,
itemBuilder: (_, DataSnapshot snapshot,
Animation<double> animation, int x) {
return new ListTile(
subtitle: new Text(snapshot.value.toString()),
);
}
),
),
],
),
);
}
希望它有所帮助。
P.S:正如Chenna Reddy指出的那样,您可以将startAt("em1@gmail.com").endAt("em1@gmail.com")
替换为equalTo("em1@gmail.com")
startAt
和endAt
非常有用。
答案 1 :(得分:1)
好的,按照你的导游(@ChennaReddy和@aziza),这就是我修改代码的方式:
body: new Column(
children: <Widget>[
new Flexible(
child: new FirebaseAnimatedList(
query: FirebaseDatabase.instance
.reference()
.child('products')
.orderByChild('Active') // line changed
.equalTo(true), // line added
padding: new EdgeInsets.all(8.0),
reverse: false,
itemBuilder: (_, DataSnapshot snapshot,
Animation<double> animation, int x) {
return new ProductItem(
snapshot: snapshot, animation: animation);
},
),
),
],
),
但是,我需要通过“订购”生成的查询订单。这是一些管理员用户可以更改(更新)的整数字段(或属性)。因此,最终用户可以看到按订单排序的数据&#39; (但只有&#39; Active&#39; = true,因为你帮助我解决)。