firebase - 在 FutureBuilder / StreamBuilder 中为文档 .doc('..') 分配动态未来值
问题描述
我是初学者,所以请原谅我一个琐碎的问题。我遇到了一个似乎很容易解决的问题。但是,在我理解这一点之前,我无法继续前进。
我有一个FutureBuilder
这样的,效果很好:
FutureBuilder(
future: FirebaseFirestore.instance
.collection('accounts')
.doc(familyId)
.collection('users')
.get(),
builder: (context, usersSnapshot) {
if (usersSnapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
final userDocs = usersSnapshot.data.docs;
return GridView.builder(
physics: AlwaysScrollableScrollPhysics(),
itemCount: userDocs.length,
primary: false,
padding: const EdgeInsets.all(20),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
//maxCrossAxisExtent: 250,
crossAxisCount: 2,
crossAxisSpacing: 20,
mainAxisSpacing: 5,
childAspectRatio: 2,
),
shrinkWrap: true,
//reverse: true,
itemBuilder: (ctx, index) => SingleUserFamily(
userDocs[index].data()['userId'],
userDocs[index].data()['username'],
userDocs[index].data()['title'],
userDocs[index].data()['userEmail'],
userDocs[index].data()['imageUrl'],
userDocs[index].data()['chosenOption'],
//userDocs[index].data()['userId'] == user.uid,
key: ValueKey(userDocs[index].id),
),
);
},
)
如您所见,familyId
Firestore 流中有一个动态字符串。familyId
我可以通过以下 Firestore 查询访问和读取此字符串 ( ),该查询有效:
String familyId;
FirebaseFirestore.instance
.collection('accounts')
.doc('family')
.collection('users')
.doc(user.uid)
.get()
.then((document) {
familyId = document['familyId'];
// I get proper result of print (I see Id string in debug console)
print (familyId);
});
不幸的是FutureBuilder
,没有看到familyId
它的“未来:”。
如何document['familyId']
在流中使用上述查询的值FutureBuilder
?
非常感谢您挽救了我的生命!:)
解决方案
如果不了解您使用的环境,这些类型的问题可能很难诊断。最好尽可能在本地进行测试,并查看部署过程中产生的任何错误日志。
有一些出色的工具可以在本地测试您的 Firebase 代码。如果您从本地 shell 以增量和交互方式对代码进行单元测试,您将快速发现任何问题。
您还可以在将代码投入生产之前使用Firebase 模拟器对代码进行原型设计、开发和测试。
虽然测试是开发工作流程不可或缺的一部分,但为调试和监控代码编写日志同样重要。您可以轻松创建自定义 Google Cloud Logs,以帮助确定问题的根本原因。
有不同的方法可以做到这一点,但下面的这些示例提供了一个基础。您可以在此处阅读有关Firebase 日志记录的更多信息。
const functions = require("firebase-functions");
functions.logger.log("Hello from info. Here's an object:", someObj);
const { warn } = require("firebase-functions/lib/logger");
// Attach structured data to the log as the last argument.
warn("This is a 'WARNING' severity message with some metadata.", {
key1: 'val1',
key2: 'val2'
});
index.js
exports.helloError = functions.https.onRequest((request, response) => {
console.log('I am a log entry!');
response.send('Hello World...');
});
推荐阅读
- python - 如何从另一个 .py 调用 Python 代码?(当我按空格键时,两个 .py 都在同一个文件中)
- python - 无论如何使用熊猫将html文件读取为excel或csv?
- asp.net-core - 在带有 EF Core 的 MVC Core App 中使用 asp-for 设置属性?
- android - Cordova fcm 插件:“块”参数必须是字符串类型或 Buffer 的实例
- image - 将文件保存/加载为字节缓冲区
- typescript - VSCode 中的打字稿扩展
- javascript - 尝试在 GTM 中获取干净的 URL
- azure - ADLS Gen2 REST API 给出错误,状态码为 400
- ios - 如果语句总是被评估,那么单元格中总是会打印一些东西
- github - 在 GitHub Actions 中创建作业之间的依赖关系