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

abn*_*h69 6 dart firebase firebase-realtime-database 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);
              },
            ),
          ),
        ],
      ),
Run Code Online (Sandbox Code Playgroud)

但我需要添加一个简单的查询: 'Active' = true

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

谢谢.

azi*_*iza 10

如果我正确地得到您的问题,您正在尝试查询某些数据("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()),
                  );
                }
            ),
          ),
        ],
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

希望它有所帮助.

PS:由于Chenna雷迪指出的那样,你可以替换startAt("em1@gmail.com").endAt("em1@gmail.com")通过equalTo("em1@gmail.com")

startAt并且endAt在需要将查询限制在特定范围时非常有用.

欲获得更多信息.

  • 为什么不使用 `equalTo` 而不是 `startAt` 和 `endAt` 的组合? (2认同)