Flutter 方法';[]和#x27;在null上调用了。颤振

Flutter 方法';[]和#x27;在null上调用了。颤振,flutter,dart,nosuchmethoderror,Flutter,Dart,Nosuchmethoderror,这是FutureBuilder: @覆盖 小部件构建(构建上下文){ 回归未来建设者( 未来:postsRef .document(userId) .collection('userPosts') .文件(已过帐) .get(), 生成器:(上下文,快照){ 如果(!snapshot.hasData){ 返回循环进程(); } Post Post=Post.fromDocument(snapshot.data); 返回中心( 孩子:脚手架( appBar:header(上下文,titleText

这是FutureBuilder:

@覆盖
小部件构建(构建上下文){
回归未来建设者(
未来:postsRef
.document(userId)
.collection('userPosts')
.文件(已过帐)
.get(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回循环进程();
}
Post Post=Post.fromDocument(snapshot.data);
返回中心(
孩子:脚手架(
appBar:header(上下文,titleText:post.description),
正文:ListView(
儿童:[
容器(
孩子:波斯特,
)
],
),
),
);
},
);
}
引用它的show post方法:

showPost(上下文){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>PostScreen(
posted:posted,
userId:userId,
),
),
);
}
低于误差

对null调用了方法“[]”。 收件人:空 已尝试呼叫: 导致错误的相关小部件是: 未来建设者file:///home/testflutter/AndroidStudioProjects/testingflutter/lib/pages/post_screen.dart:15:12


添加
else
子句

Widget build(BuildContext context) {
    return FutureBuilder(
      future: postsRef
          .document(userId)
          .collection('userPosts')
          .document(postId)
          .get(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return circularProgress();
        }
        else {
        Post post = Post.fromDocument(snapshot.data);
        return Center(
          child: Scaffold(
            appBar: header(context, titleText: post.description),
            body: ListView(
              children: <Widget>[
                Container(
                  child: post,
                )
              ],
            ),
          ),
        );
        } 
      },
    );
小部件构建(构建上下文){
回归未来建设者(
未来:postsRef
.document(userId)
.collection('userPosts')
.文件(已过帐)
.get(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回循环进程();
}
否则{
Post Post=Post.fromDocument(snapshot.data);
返回中心(
孩子:脚手架(
appBar:header(上下文,titleText:post.description),
正文:ListView(
儿童:[
容器(
孩子:波斯特,
)
],
),
),
);
} 
},
);

检查快照的
连接状态
,查看是否已完成

Widget build(BuildContext context) {
  return FutureBuilder(
    future: postsRef
        .document(userId)
        .collection('userPosts')
        .document(postId)
        .get(),
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting)
        return circularProgress();
      else if (snapshot.connectionState == ConnectionState.done) {
        if (snapshot.hasData && snapshot.data.isNotEmpty) {
          Post post = Post.fromDocument(snapshot.data);
          return Center(
            child: Scaffold(
              appBar: header(context, titleText: post.description),
              body: ListView(
                children: <Widget>[
                  Container(
                    child: post,
                  ),
                ],
              ),
            ),
          );
        } else {
          return Center(child: Text("No data or it's empty"));
        }
      } else {
        return Center(child: Text("Neither waiting or done..."));
      }
    },
  );
}
小部件构建(构建上下文){
回归未来建设者(
未来:postsRef
.document(userId)
.collection('userPosts')
.文件(已过帐)
.get(),
生成器:(上下文,快照){
if(snapshot.connectionState==connectionState.waiting)
返回循环进程();
else if(snapshot.connectionState==connectionState.done){
if(snapshot.hasData&&snapshot.data.isNotEmpty){
Post Post=Post.fromDocument(snapshot.data);
返回中心(
孩子:脚手架(
appBar:header(上下文,titleText:post.description),
正文:ListView(
儿童:[
容器(
孩子:波斯特,
),
],
),
),
);
}否则{
返回中心(子项:文本(“无数据或为空”);
}
}否则{
返回中心(子项:文本(“未等待或完成…”);
}
},
);
}

我已经修复了代码以使其更简单,并添加了else子句。

可能的错误是,在showPost()方法中

home.dart文件中初始化一个用户对象

用户当前用户;

然后更新showPost()方法,如下所示:

showPost(BuildContext context) {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) =>
            PostScreen(userId: currentUser.id, postId: postId),
      ),
    );
  }