Firebase 为什么我';我得到了';方法';[]和#x27;在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

因此,我有一个通知屏幕,带有媒体预览(在通知旁边显示图像)。 当(点击)媒体预览时,我想重定向到另一个页面以显示图像,出于某种原因,它给了我,方法[]被调用为null

这是我点击图片时显示帖子的代码

    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
库,因此,它可能发生在您的
未来的
属性中,或者在构建器函数中,您可以使用断点来检测它