方法'[]'在null上被调用。颤抖?

时间:2020-10-04 10:08:37

标签: android flutter flutter-futurebuilder

我的futurebuilder发生错误,上面的任何人都没有任何解决方案相关的引起错误的小部件是: FutureBuilder ................................................. ................................................... ................................................... ................................................... ................................................... ........ ..........................

noti.dart
          Widget build(BuildContext context) {
            return FutureBuilder(
                future: postReference
                    .document(userId)
                    .collection("usersPosts")
                    .document(postId)
                    .get(),
                builder: (context, datasnapshot) {
                  if (!datasnapshot.hasData) {
                    return circularProgress();
                  }
                  Post post = Post.fromDocument(datasnapshot.data);
                  return Center(
                    child: Scaffold(
                      appBar: header(context, strTitle: post.description),
                      body: ListView(
                        children: <Widget>[
                          Container(
                            child: post,
                          ),
                        ],
                      ),
                    ),
                  );
                });


    Post.dart

class Post extends StatefulWidget {
  final String postId;
  final String ownerId;
  // final String timestamp;
  final dynamic likes;
  final String username;
  final String description;
  final String location;
  final String url;
  //
  Post({
    this.postId,
    this.ownerId,
    // this.timestamp,
    this.likes,
    this.username,
    this.description,
    this.location,
    this.url,
  });

  factory Post.fromDocument(DocumentSnapshot documentSnapshot) {
    return Post(
      postId: documentSnapshot["postId"],
      ownerId: documentSnapshot["ownerId"],
      likes: documentSnapshot["likes"],
      // timestamp: documentSnapshot["timestamp"],
      username: documentSnapshot["username"],
      description: documentSnapshot["description"],
      location: documentSnapshot["location"],
      url: documentSnapshot["url"],
    );
  }

引用它的post方法:

displayPost(context) {
  Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => PostScreen(
        postId: postId,
        userId: userId,
      ),
    ),
  );
}

1 个答案:

答案 0 :(得分:0)

这可能是因为您从查询中接收到空值。 您想要将documentSnapshot [“ postId”]映射到您的Post,并且此事件由于null而失败。

对于纯净代码,我建议您使用quicktype创建一个新的Post模型 并用json映射您的帖子。 然后检查value == null:

factory Score.fromJson(Map<String, dynamic> json) => Score(
    score: json["score"] == null ? null : json["score"].toDouble(),