如何使用buildArguments或其他任何东西在Flutter / FirebaseAnimatedList中查询? (请举例)

时间:2017-10-24 14:08:38

标签: firebase firebase-realtime-database dart flutter

我有一个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

有可能吗?怎么样?任何示例/教程?

感谢。

2 个答案:

答案 0 :(得分:9)

如果我正确地提出您的问题,您正在尝试查询某些数据(“Active”= true),然后参见以下示例。

我已经从我的数据库中添加了一个屏幕截图,以便在我的数据结构方式上有更多的背景信息,并希望它能让您直观地实现类似的结果。

enter image description here

在上一个示例中,我正在执行以下查询,仅获取设置为“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")

当您需要将查询限制在特定范围内时,

startAtendAt非常有用。

For more information.

答案 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,因为你帮助我解决)。