我试图获取firestore子集合中的文档数据,然后显示此错误“空值上使用了空检查操作符“。我想为每个用户获取用户集合中的一篇文章。
数据库截图
用户表
文章子集
所有文章UI
点击查看按钮时如何获取文章
查看所有文章界面按钮代码
ElevatedButton(child: Text('View'),onPressed: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => ViewOneUserArticleScreen(id: data[index].id,)));
查看一个商品代码
Articles? oneArticle;
bool loading = false;
@override
initState() {
super.initState();
loading = true;
getArticle();
}
User? user = FirebaseAuth.instance.currentUser;
UserModel loggedInUser = UserModel();
Future<void> getArticle() async {
final id = widget.id;
final reference = FirebaseFirestore.instance.doc('users/${user?.uid}/articles/$id');
final snapshot = reference.get();
final result = await snapshot.then(
(snap) => snap.data() == null ? null : Articles.fromJson(snap.data()!));
setState(() {
oneArticle = result;
loading = false;
});
}
模型
class Articles {
final String id;
final String topic;
final String description;
final String url;
Articles({
required this.id,
required this.topic,
required this.description,
required this.url
});
Articles.fromJson(Map<String, dynamic> json)
: this(
id: json['id'],
topic: json['topic']! as String,
url: json['url']! as String,
description: json['description']! as String,
);
Map<String, Object?> toJson() {
return {
'id': id,
'topic': topic,
'url': url,
'description': description,
};
}
}
新错误
1条答案
按热度按时间toiithl61#
问题出在解析方法上,请将
Articles.fromJson
更改为:在你的json中,
topic
,description
和url
可能是null
,但是你在它们上面使用了!
,这意味着你确信它们不是空的,但是它们是空的。同样,你的id
可能是空的,但是在你的对象模型中你把它设置为required
,因此您需要为其提供默认值,或者只是删除它前面的required
。