如何在 flutter 中以简单的方式从实时数据库中获取数据?
How to fetch data from realtime database in a simple way in flutter?
目前我正在同时使用 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'];
那么如何对实时数据库做同样的事情呢?
实时数据库的 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
看起来令人困惑,请查看
目前我正在同时使用 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'];
那么如何对实时数据库做同样的事情呢?
实时数据库的 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
看起来令人困惑,请查看