如何使用 buildArguments 或其他任何东西在 Flutter/FirebaseAnimatedList 中查询? (请举例)
Posted
技术标签:
【中文标题】如何使用 buildArguments 或其他任何东西在 Flutter/FirebaseAnimatedList 中查询? (请举例)【英文标题】:How to query in a Flutter/FirebaseAnimatedList using buildArguments or anything else? (example please) 【发布时间】:2018-04-05 09:07:24 【问题描述】:我有一个带有正文的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
有可能吗?如何?任何示例/教程?
谢谢。
【问题讨论】:
由于您想通过“活动”字段进行查询,根据您存储活动字段的方式,您的查询应该类似于FirebaseDatabase.instance .reference().child('active').equalTo(true)
或FirebaseDatabase.instance .reference().child('active').equalTo('true')
。我可以知道使用 orderByChild('order') 的动机是什么吗?为什么是查询的一部分?
@ChennaReddy,我需要按“订单”生成的查询顺序,这是一个整数字段(或属性),一些管理员用户可以更改(更新)。所以最终用户可以看到按“顺序”排序的数据(但只有 'Active'=true,因为你帮我解决了)。
【参考方案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);
,
),
),
],
),
但是,我需要按“order”生成的查询顺序,它是一些管理员用户可以更改(更新)的整数字段(或属性)。所以最终用户可以看到按“顺序”排序的数据(但只有“活动”=true,因为你帮我解决了)。
【讨论】:
感谢您的回答。我面临类似的情况,您的回答有所帮助,但提出了另一个问题。我怎样才能让它随着列表滚动,而不是坐在顶部的静态小部件?【参考方案2】:如果我没有正确回答您的问题,您正在尝试查询一些数据 where ("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
在您需要将查询限制在特定范围内时很有用。
For more information.
【讨论】:
为什么不使用equalTo
而不是startAt
和endAt
的组合?
这是我最初设置查询的方式,equalTo
肯定会得到相同的结果。以上是关于如何使用 buildArguments 或其他任何东西在 Flutter/FirebaseAnimatedList 中查询? (请举例)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 fiddler 或任何其他工具跟踪 HttpClient 请求?
如何使用 ProGuard(或任何其他方式)隐藏库 Jar 中的公共类?
如何在没有任何 IDE 或 GlassFish 等任何其他附加软件的情况下安装和使用 JEE [重复]
如何使用 Cloudkit 将字典(或任何其他复杂结构)保存到 iCloud 中?
如何在 WebStorm 或任何其他 JetBrains 产品中使用 WSL 作为默认终端?
如何使用 Visual Studio 或 Resharper(或任何其他工具!)将 HTML 正确粘贴到 C# 代码中?