Flutter为body添加多个子组件 解决children参数重复指定报错
报错根因
触发The argument for the named parameter 'children' was already specified.报错的核心原因是:你给Column组件重复传了两次children命名参数。Dart语法中,同一个组件的命名参数只能指定一次,重复传参会直接编译报错,和你是否用Column做多子布局没有关系。
代码问题点
你当前的Column代码存在重复传参的结构错误:
Column( children: [TextButton(/* 第一个跳转按钮 */)], // 第一次传children children: [TextButton(/* 第二个跳转按钮 */)], // 第二次重复传children,直接触发报错 )
Column的children参数本身就是用于接收组件列表的,你需要放多少个子组件,全部追加到同一个children对应的数组中即可,不需要多次声明children参数。
修复后代码
把两个TextButton放到同一个children数组内,用逗号分隔即可,修复后的完整build逻辑如下:
@override Widget build(BuildContext context){ return Scaffold( appBar: AppBar( title: Text(title), ), body: Column( children: [ TextButton( onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) { return const FeatureScreenUno(title: 'Feature Screen uno'); })); }, child: const Text('Feature Screen uno') ), TextButton( onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) { return const FeatureScreenDos(title: 'Feature Screen dos'); })); }, child: const Text('Feature Screen dos'), ), ] ) ); }
注意事项
- Flutter所有接收多子组件的容器(Column、Row、ListView、Stack、Wrap等)都仅提供一个
children传参入口,新增子组件时直接在该参数的数组内追加即可,禁止重复声明同名参数。 - 如果需要调整子组件的排列间距、对齐规则,可以给Column配置
mainAxisAlignment、crossAxisAlignment属性,或者在子组件之间插入SizedBox、Padding组件做留白调整。
内容的提问来源于stack exchange,提问作者Elbastian Jegels
相关产品推荐
相关产品推荐

