Flutter 方法';[]和#x27;在null上调用了。颤振
这是FutureBuilder: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
@覆盖
小部件构建(构建上下文){
回归未来建设者(
未来: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),
),
);
}