【发布时间】:2021-02-22 00:49:26
【问题描述】:
我有一个按钮,当我按下它时,我希望它用一个字符串更新一个空值。在代码中,您会注意到一个未来的构建器,并且只知道我需要它来确定我应该根据 Firestore 中的数据状态准确更新什么。创建用户时,isPledged 的值设置为 null,但正如您在 if 语句中看到的,如果该值为 null,我想用字符串“true”更新它。但是,当我这样做时,Firestore 中没有任何变化,其值仍为 null。我对我搞砸的地方有点困惑,所以任何帮助都将不胜感激。另外,我知道我可以删除 if 语句,但如果值确实有数据,我将添加另一个选项,所以这就是存在的原因。
onPressed: () {
FutureBuilder(
future: getPledgedStatus(),
builder: (_, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
final CollectionReference
users = FirebaseFirestore.instance.collection('UserNames');
FirebaseAuth auth = FirebaseAuth.instance;
String uid = auth.currentUser.uid.toString();
users.doc(uid).update(
{'isPledged': "true"}
);
}
},
);
Navigator.of(context).pop();
},
【问题讨论】:
-
我想可能是因为您将用户的 uid 转换为字符串,而 firebase 由于它是字符串而无法检测到该用户 id
-
@iKreateCode 抱歉没用。
-
代码看起来不错;你能分享你的firestore doc路径结构吗?还可以通过打印
uid来验证文档 ID。 -
@MuthuThavamani 所以我进行了一些测试并得出结论,Future Builder 一定有问题。当我拿走 Future Builder 而是直接在按下时更新文档时,值确实发生了变化。当我使用 if 语句将相同的代码放回 Future 构建器以检查是否有数据时,它无法工作。你建议我做什么?
-
@MuthuThavamani 实际上你只是使用异步函数是对的,我错过了。我写了一些新代码,它就像一个魅力。我会发布一个答案,谢谢
标签: firebase flutter google-cloud-firestore