我正在使用“ Firebase实时数据库”来获取Flutter应用程序中的一些数据。
数据的结构类似于下面的图片。
我想要创建的列表由每个上层孩子组成(例如[central][2] = "test-2"
[central][3] = ""
[central][4] = "test-4"
)
但是我不断得到不可分割的值,如下图所示。我还尝试使用snapshot.value
从ToList()
中分离出值,但是失败了。
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()
),
],
)
);
}
),
),
],
)
);
}
}
我一直在尝试通过搜索和修改代码来解决此问题,但一直失败。.有什么解决方案吗?
感谢您阅读。
答案 0 :(得分:0)
Firebase RTDB不支持针对不等式匹配的查询或过滤出空值的查询。它需要在前端显示端完成。但是在您的情况下,确切的查询需要传递给FirebaseAnimatedList,这使它有点麻烦。
在阅读文档后,似乎没有一种简单的方法可以进一步过滤查询(也许检入itemBuilder
并发送null可能有用-我没有测试过)。
在任何一种情况下,最好的方法是首先确保您的数据不以该格式构造。一个简单的database rule应该可以工作。