如何在 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 看起来令人困惑,请查看