Firebase 为什么我';我得到了';方法';[]和#x27;在null'上调用;飘飘然
因此,我有一个通知屏幕,带有媒体预览(在通知旁边显示图像)。 当(点击)媒体预览时,我想重定向到另一个页面以显示图像,出于某种原因,它给了我,方法[]被调用为null 这是我点击图片时显示帖子的代码Firebase 为什么我';我得到了';方法';[]和#x27;在null'上调用;飘飘然,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,因此,我有一个通知屏幕,带有媒体预览(在通知旁边显示图像)。 当(点击)媒体预览时,我想重定向到另一个页面以显示图像,出于某种原因,它给了我,方法[]被调用为null 这是我点击图片时显示帖子的代码 showPost(context) { Navigator.push( context, MaterialPageRoute( builder: (context) => PostScreen( postId: pos
showPost(context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PostScreen(
postId: postId,
userId: userId,
),
),
);
}
以下是PostScreen的代码:
class PostScreen extends StatelessWidget {
final String userId;
final String postId;
PostScreen({this.postId, this.userId});
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: postsRef
.document(userId)
.collection('userPosts')
.document(postId)
.get(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return circularProgress();
}
Post post = Post.fromDocument(snapshot.data);
return Center(
child: Scaffold(
appBar: header(context, appTitle: post.description),
body: ListView(
children: <Widget>[
Container(
child: post,
)
],
),
),
);
},
);
}
}
class PostScreen扩展了无状态小部件{
最终字符串用户标识;
最后的字符串posted;
PostScreen({this.postId,this.userId});
@凌驾
小部件构建(构建上下文){
回归未来建设者(
未来:postsRef
.document(userId)
.collection('userPosts')
.文件(已过帐)
.get(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回循环进程();
}
Post Post=Post.fromDocument(snapshot.data);
返回中心(
孩子:脚手架(
appBar:header(上下文,appTitle:post.description),
正文:ListView(
儿童:[
容器(
孩子:波斯特,
)
],
),
),
);
},
);
}
}
所以我在Post Post=Post.fromDocument(snapshot.data)中使用了调试器和断点后找到了解决方案
我发现在a用户IDposts集合中找不到postId(我们称之为用户a),因此用户a没有此postId的帖子,但用户B拥有我一直在寻找的帖子。因此,我将showPost功能从:
showPost(上下文){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>PostScreen(
posted:posted,
userId:userId,
),
),
);
}
到
showPost(上下文){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>PostScreen(
posted:posted,
userId:currentUser?.id,
),
),
);
}
这样,当我点击另一个用户帖子时(我获得用户ID以获得他的帖子集),当我点击我的帖子时(我获得我的用户ID以获得我的帖子集)
希望这会有所帮助。你能添加你的
帖子吗。也可以从文档中添加代码吗?试着调试你的代码并检测它在哪一行fall@Nolence:factory Post.fromDocument(DocumentSnapshot doc){return Post(postId:doc['postId'],ownerId:doc['ownerId'],username:doc['username'],location:doc['location'],description:doc['description'],mediaUrl:doc['mediaUrl'],likes:doc['likes'],);}@dubase调试控制台show's:User-created祖先的错误导致小部件是PostScreen。我理解,但我看不到您在哪里初始化posRef
库,因此,它可能发生在您的未来的属性中,或者在构建器函数中,您可以使用断点来检测它