firebase - 如何在发送到 Firebase 之前验证数据 - Flutter
问题描述
我需要验证数据是否成功发送到Firebase,我有一个Field增量值,在用户的列表中,并且每次用户提交答案时该字段都会增加,但是问题是,即使答案是空的如果我点击 addAnswer 按钮,则增量正在发生,我希望仅在成功提交答案时更新增量计数器。
增量未来方法
Future answerCounter(BuildContext context, String userID,)async{
return FirebaseFirestore.instance.collection('users').doc(userID).update({
'answercounter': FieldValue.increment(1),
});
}
添加答案和答案计数器的代码
answerAdder(BuildContext context,
AsyncSnapshot<DocumentSnapshot> documentSnapshot, String QuesID) {
return showModalBottomSheet(
elevation: 0,
backgroundColor: Colors.transparent,
isScrollControlled: true,
context: context,
builder: (context) {
return Container(
height: MediaQuery.of(context).size.height * 0.8,
width: MediaQuery.of(context).size.width,
margin: EdgeInsets.symmetric(horizontal: 5),
decoration: BoxDecoration(
color: constantColors.white,
borderRadius: BorderRadius.only(
topRight: Radius.circular(25), topLeft: Radius.circular(25)),
),
child: Column(
children: [
Divider(
indent: 110,
endIndent: 110,
thickness: 4,
color: Colors.grey,
),
Padding(
padding: const EdgeInsets.all(5.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
MaterialButton(
onPressed: () {
Provider.of<PostFunctions>(context, listen: false)
.addAnswer(
context,
documentSnapshot.data.data()['question id'],
answerController.text,
titleController.text)
.whenComplete(() {
Navigator.pop(context);
print('adding counter');
if(documentSnapshot.hasData){
return Provider.of<PostFunctions>(context, listen: false)
.answerCounter(context, Provider.of<Authentication>(context,listen: false).getUserUid);
} else {
print('error');
}
});
Navigator.pop(context);
},
解决方案
您的代码中的问题是documentSnapshot.hasData()
始终返回 true。名称可能有点混乱,但hasData()
仅检查内容是否不为 null。这就是为什么它总是更新计数器。如果您更改该部分,请添加以下内容:
if(snapshot.hasData() && snapshot.data.exists()) {}
或者
if (snapshot.data?.exists ?? false) {}
其中任何一个都应该起作用,并且仅在数据确实包含文档时才更新计数器。
推荐阅读
- swift - Swift - 修改变量
- spring-boot - 如何为 Thymeleaf 激活不同的日志记录级别?
- c++ - 检查 Boost Interprocess managed_shared_memory 是否已经存在?
- bash - 使用 bash 4 语法将 Makefile 中字符串的首字母大写
- matlab - 如何找到 R、G、B、H、S、V 值
- r - 是否可以从使用 `facet_wrap` 的 `ggplots` 中获取`轴中断`?
- javascript - 动态地将变量名称添加到 json 数据中
- google-analytics - 谷歌分析在 4 月 25 日停止了对某些页面的工作
- react-native - 为什么使用 AsyncStorage.setItem 没有问题?
- javascript - 在搜索和显示结果上显示相同的按钮