未来的构建器颤动 firebase 错误:“Iterable<BlogPost>”类型的值无法分配给“List<BlogPost>”类型的变量

Posted

技术标签:

【中文标题】未来的构建器颤动 firebase 错误:“Iterable<BlogPost>”类型的值无法分配给“List<BlogPost>”类型的变量【英文标题】:Future builder flutter firebase error: A value of type 'Iterable<BlogPost>' can't be assigned to a variable of type 'List<BlogPost>' 【发布时间】:2021-09-08 02:38:12 【问题描述】:

我在创建未来构建器时遇到问题。我正在尝试创建要在 ListView 中显示的文档列表,但我无法在我创建的自定义类中创建列表(博客帖子)。

我不断收到此错误:

Error: A value of type 'Iterable<BlogPost>' can't be assigned to a variable of type 'List<BlogPost>'.

这是我的代码:

CollectionReference postsRef = FirebaseFirestore.instance.collection('posts');
late List<BlogPost> posts;

FutureBuilder(
          future: postsRef.get().then((val) 
              posts = val.docs.map((doc) => BlogPost.fromDocument(doc));
            ),
          builder: (context, snap) 
            if(snap.connectionState == ConnectionState.done) 
              return ListView.builder(
                physics: BouncingScrollPhysics(),
                  itemCount: 3,
                  itemBuilder: (context, index) 
                  return Text('data);
                  
              );
             else 
              return Center(
                child: Text('Loading')
              );
            
          
        )

这是我的自定义类的代码:

class BlogPost 
  String displayName;
  String postmsg;
  String postId;
  String UserId;

  BlogPost(this.displayName, this.postmsg, this.postId, this.UserId);

  factory BlogPost.fromDocument(DocumentSnapshot doc) 
    return BlogPost(
        doc['displayName'],
        doc['postmsg'],
        doc['postId'],
        doc['UserId']
    );
  

【问题讨论】:

【参考方案1】:

map() function 返回一个Iterable。要将其转换为列表,请在其结果上调用 toList()。所以:

posts = val.docs.map((doc) => BlogPost.fromDocument(doc)).toList()

【讨论】:

我不再有那个错误,但现在当我尝试使用'post'时,我收到错误“LateInitializationError: Field 'posts' has not been initialized。”知道如何解决这个问题吗? 听起来你在给它一个值之前试图访问posts。错误的堆栈跟踪应该告诉您问题发生的确切位置。

以上是关于未来的构建器颤动 firebase 错误:“Iterable<BlogPost>”类型的值无法分配给“List<BlogPost>”类型的变量的主要内容,如果未能解决你的问题,请参考以下文章

未来列表和刷新加载器|颤动的问题

升级firebase核心后颤动Ios构建失败

firebase,颤动错误“无法解析所有配置文件”

如何在颤动中使用流构建器刷新小部件

在颤动中将图像从图像选择器保存到firebase存储

缺少文件附加错误颤动firebase