flutter - Flutter:使用带有 http 请求的 Firebase 实时数据库实现分页
问题描述
如何在 Flutter 中使用 HTTP 请求在实时数据库中实现分页?我尝试了以下但它返回了一个错误。
Future<List<News>> fetchNews() async {
final response = await http.get("https://<project-id>.firebaseio.com/posts.json?orderBy='t'&limitToFirst=10");
Map map = json.decode(response.body);
map.forEach((NewsId, NewsData) {
_list.add(News.fromJson(NewsData));
});
return _list;
}
返回的错误是:
I/flutter (18683): {
I/flutter (18683): "error" : "orderBy must be a valid JSON encoded path"
I/flutter (18683): }
我试图用这个替换网址:https://project-id.firebaseio.com/posts.json?orderBy=(backslash)"t(backslash)"&limitToFirst=10 但我收到的错误是这样的:
I/flutter (18683): {
I/flutter (18683): "error" : "Index not defined, add \".indexOn\": \"t\", for path \"/posts\", to the rules"
I/flutter (18683): }
有关如何实现分页的任何帮助都会有所帮助。我也不介意恢复使用包而不是 http 请求。如果这两种方法之间有任何显着差异,我将不胜感激有关这方面的一些信息。
我的数据库结构如下:
<project-id>
|__posts
|____(unique key1)
|_____field1
|_____field2
|_____field3
|____(unique key2)
|____(unique key3)
提前致谢。
解决方案
您快到了。第一个错误是因为要订购的属性名称必须是双引号中的字符串。单引号是不可接受的,因此您的转义方式"
确实是正确的。
新错误是因为您需要在数据库的安全规则中定义一个索引,以便服务器知道对数据库进行排序/过滤。如果您检查有关索引数据的文档并从错误消息中获取信息,则会变成:
{
"rules": {
"posts": {
".indexOn": "t"
}
}
}
顺便说一句:我通常首先让我的 REST 查询在浏览器中运行,然后才在我的代码中复制它们。这样你就知道错误是来自 Firebase,还是来自你在 Flutter 代码中调用它的方式。
推荐阅读
- c# - 如何在自定义 JsonConverter 的 WriteRawValue 中添加缩进?
- python - 我怎样才能让这些粒子在 Pygame 中跳跃
- python - 将新数据集转换为以前的 patsy dmatrix 形式
- gsap - GSAP scrollTrigger 在页面加载时触发,而不是“开始”触发器(React.js)
- css - 在 WordPress 中将自定义 css 添加到文本和图像块的图像侧
- python - 是否可以使用抢占式 tpu 在 Google 的 AI 平台上训练深度神经网络?
- node.js - 不能用 knex 打开加密的 sqlite3 db 文件吗?
- c++ - 链接顺序改变程序的行为
- abp - 如何在 AbpAuthorizationModule 中覆盖 AbpAuthorizationResources 本地化
- go - 空接口是绕过类型系统的一种方式吗?