添加列表<;Widget>;动态地ListView.children
我正在尝试动态构建我的添加列表<;Widget>;动态地ListView.children,listview,dart,flutter,Listview,Dart,Flutter,我正在尝试动态构建我的ListView.children[]的一部分,但是我无法将它们推送到已经存在的数组中。以下是我的简化代码: Widget buildNavigationDrawer(BuildContext context) { return Drawer( child: ListView( // Important: Remove any padding from the ListView. padding: EdgeInsets
ListView.children[]
的一部分,但是我无法将它们推送到已经存在的数组中。以下是我的简化代码:
Widget buildNavigationDrawer(BuildContext context) {
return Drawer(
child: ListView(
// Important: Remove any padding from the ListView.
padding: EdgeInsets.zero,
children: <Widget>[
DrawerHeader(...code for header of drawer),
_buildUserGroups(context).map((Widget item)=> item),
ListTile(
leading: Icon(Icons.account_circle),
title: Text('Settings'),
onTap: () {
Navigator.push(
context,
FadeTransitionRoute(
builder: (context) => MainSettingsPage()));
},
),
],
),
);
}
我曾尝试使用\u buildUserGroups(context).forEach()
,\u buildUserGroups(context).map()
,或者像\u buildUserGroups(context)
那样简单地转储结果;但它失败了,并显示了相同的错误消息:
[dart]无法将元素类型“Iterable”分配给
列表类型“小部件”
我很肯定这是一种方法,但我想不出来。如果您能为我提供任何帮助或建议,我将不胜感激,因为我现在陷入了困境。我的想法过于复杂,我看不出有一个简单的解决方案一直摆在我面前。我最终将它包装在
列中
小部件中,解决了这个问题:
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: _buildUserGroups(context),
),
用ExpansionFile或Column包装它
问题:
_buildUserGroups(context).map((Widget item)=> item),
解决方案:1
ExpansionTile(
title: Text("New List"),
children: _buildUserGroups(context).map((Widget item)=> item),
)
解决方案:2
Column(
children: _buildUserGroups(context).map((Widget item)=> item),
)
注意:
Iterable只分配给子项:
,因为它得到一个列表
。您正在为单子小部件设置iterable,这就是您出错的原因
我希望这能解决你的问题。快乐编码 正如其他答案所指出的,\u buildUserGroups(context)
是一个问题,因为它返回一个小部件列表,导致一个嵌套列表
自Dart 2.3(在Google I/O'19中引入颤振)以来,您可以使用扩展运算符..
,它将打开内部列表,因此其元素将成为外部列表的元素:
Widget buildNavigationDrawer(BuildContext上下文){
回程抽屉(
子:ListView(
儿童:[
付款人(…),
…构建用户组(上下文),
ListTile(…)
],
),
);
}
有关spread操作符的更多信息,请查看
原始答案(在Dart 2.3之前):
_buildUserGroups(context).map((Widget item)=> item),
您可以将函数调用包装在列
或扩展文件
中
然而,这将在小部件树中引入一个新的小部件。
诚然,对性能的影响很小,但在我看来,一个更干净的解决方案是构建如下小部件列表:
Widget buildNavigationDrawer(BuildContext上下文){
最后项目=[]
…添加(抽屉阅读器(…)
…addAll(_buildUserGroups(上下文))
…添加(列表块(…);
退货抽屉(子项:列表视图(子项:项目));
}
如果坚持使用内联解决方案,还可以使用。followerby(…)
将项目添加到列表中:
Widget buildNavigationDrawer(BuildContext上下文){
回程抽屉(
子:ListView(
儿童:[付款人(…)]
.followerby(_buildUserGroups(上下文))
.followerby([ListTile(…)]))
),
);
}
不知道followerby。谢谢