未来的构建器颤动 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>”类型的变量的主要内容,如果未能解决你的问题,请参考以下文章