Flutter)如何从Firebase实时数据库中检索某些值?

时间:2020-08-22 16:20:35

标签: firebase flutter firebase-realtime-database

  1. 我正在使用“ Firebase实时数据库”来获取Flutter应用程序中的一些数据。

  2. 数据的结构类似于下面的图片。

enter image description here

  1. 我想要创建的列表由每个上层孩子组成(例如[central][2] = "test-2" [central][3] = "" [central][4] = "test-4"

  2. 但是我不断得到不可分割的值,如下图所示。我还尝试使用snapshot.valueToList()中分离出值,但是失败了。

enter image description here

  1. 代码
import 'package:firebase_database/firebase_database.dart';
import 'package:firebase_database/ui/firebase_animated_list.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';


class GetMealScreen extends StatefulWidget {
  @override
  _GetMealScreenState createState() => _GetMealScreenState();
}

class _GetMealScreenState extends State<GetMealScreen> {

  DatabaseReference itemRef5 = FirebaseDatabase.instance.reference().child("central");

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Example"),
        ),
        resizeToAvoidBottomPadding: false,
        body: Column(
          children: <Widget>[
            Flexible(
              child: FirebaseAnimatedList(
                  query: itemRef5, // use this just for test
                  itemBuilder: (BuildContext context, DataSnapshot snapshot,
                      Animation<double> animation, int index) {

                    return Container(
                        child:
                        Column(
                          children: <Widget>[
                            Text(
                                snapshot.value.toString()
                            ),
                          ],
                        )
                    );
                  }
              ),
            ),
          ],
        )
    );
  }
}

我一直在尝试通过搜索和修改代码来解决此问题,但一直失败。.有什么解决方案吗?

感谢您阅读。

1 个答案:

答案 0 :(得分:0)

Firebase RTDB不支持针对不等式匹配的查询或过滤出空值的查询。它需要在前端显示端完成。但是在您的情况下,确切的查询需要传递给FirebaseAnimatedList,这使它有点麻烦。

在阅读文档后,似乎没有一种简单的方法可以进一步过滤查询(也许检入itemBuilder并发送null可能有用-我没有测试过)。

在任何一种情况下,最好的方法是首先确保您的数据不以该格式构造。一个简单的database rule应该可以工作。