Flutter类型错误:无法将List<Text>分配给Widget列表类型 如何解决?
解决Flutter中“元素类型‘List’无法分配给列表类型‘Widget’”错误
问题原因
错误出在StreamBuilder的builder返回的Column组件中:你将messageWidgets(一个List<Widget>)直接作为单个元素放进了children数组。而Column的children要求是List<Widget>类型的元素集合,此时你的代码相当于传递了[List<Widget>],类型不匹配导致报错。
解决方法
有两种简洁的修复方式:
方式1:使用扩展运算符展开列表
把messageWidgets通过...运算符展开,将列表中的每个Widget直接作为Column的子元素:
return Column( children: <Widget>[ ...messageWidgets, ], );
方式2:直接将列表赋值给children
如果Column不需要额外的子元素,直接把messageWidgets赋值给children即可:
return Column( children: messageWidgets, );
完整修复后的核心代码片段
StreamBuilder<QuerySnapshot>( stream: _firestore.collection('messages').snapshots(), builder: (context,snapshot){ List<Widget> messageWidgets = []; if(snapshot.hasData){ final messages = snapshot.data?.docs; for(var message in messages!){ final messageText = message.get('text'); final messageSender = message.get('sender'); final messageWidget = Text('$messageText from $messageSender'); messageWidgets.add(messageWidget); } } // 这里使用方式1的修复 return Column( children: <Widget>[ ...messageWidgets, ], ); } ),
内容的提问来源于stack exchange,提问作者Nahom Ersom
相关产品推荐
相关产品推荐

