如何在颤振中以简单的方式从实时数据库中获取数据?
Posted
技术标签:
【中文标题】如何在颤振中以简单的方式从实时数据库中获取数据?【英文标题】:How to fetch data from realtime database in a simple way in flutter? 【发布时间】:2021-12-29 01:41:06 【问题描述】:目前我同时使用 Firestore 和实时数据库。我以最简单和最有效的方式在代码中设置和检索firestore,对于实时数据库,我设置了数据,但我无法像使用firestore那样检索它。 总结我想做与实时数据库代码中的firestore代码相同的事情。
这是我的代码:
//Get data from Firestore
Stream <DocumentSnapshot> getData() async*
final user = FirebaseAuth.instance.currentUser;
yield* FirebaseFirestore.instance.collection('users').doc(user.uid).snapshots();
//Return data in StreamBuilder (No lists or ListView.Builder needed here)
@override
Widget build(BuildContext context)
return StreamBuilder(
stream: getData(),
builder: (context, snapshot)
//--------------------------------------
//These equations comes from Firestore
//--------------------------------------
int currentWater ()=> snapshot.data['currentLitersAmount'];
int remainingWater () => snapshot.data['currentLitersAmount'] <= snapshot.data['recomendedLitersAmount'] ? snapshot.data['recomendedLitersAmount'] - snapshot.data['currentLitersAmount'] : 0;
double progress ()=> snapshot.data['currentLitersAmount'] / snapshot.data['recomendedLitersAmount'];
那么如何在这里为实时数据库做同样的事情呢?
【问题讨论】:
【参考方案1】:实时数据库的getData
函数相当于:
Stream <Event> getData() async*
final user = FirebaseAuth.instance.currentUser;
yield* FirebaseDatabase.instance.reference().child('users').child(user.uid).onValue();
然后,您可以从 UI 构建代码中的每个 Event
object 获取 DataSnapshot
。
@override
Widget build(BuildContext context)
return StreamBuilder(
stream: getData(),
builder: (context, snapshot)
int currentWater ()=> snapshot.data.snapshot.value['currentLitersAmount'];
...
如果 snapshot.snapshot
看起来令人困惑,请查看 What is the difference between existing types of snapshots in Firebase?
【讨论】:
实际上它在第二个快照中给了我一个准确的代码错误:这里=> snapshot.snashot.value,所以我尝试了snapshot.data.value,但它也返回了一个错误(类“事件”没有实例获取器“值”。接收方:“事件”实例尝试调用:值)onValue
返回一个Event
:pub.dev/documentation/firebase_database/latest/…,所以snapshot
是一个event object,你应该能够从中获取值。这就是为什么你需要snapshot.snapshot
。
你是 100% 正确的,但这里的问题是当我编写代码时它给了我一个错误行: 1. Stream以上是关于如何在颤振中以简单的方式从实时数据库中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
在颤振中显示仅产品名称的列表,使用json格式的woocommerce api数据