Flutter报错:位置参数过多,预期2个实际传入3个需移除多余参数
报错原因
Navigator.push方法的签名只接收2个必填位置参数:第一个是上下文对象context,第二个是路由对象Route。你代码里的括号嵌套完全错乱,误将ZUHUR按钮的ElevatedButton组件作为第三个参数传给了Navigator.push,直接触发参数数量不匹配报错。
具体错误点:
- SUBUH按钮的
onPressed回调中,Navigator.push的闭合括号位置错误,本该在halamansubuh()对应的MaterialPageRoute定义完成后就结束push调用,结果把ZUHUR按钮的整段组件代码写到了push的参数括号内 IndexedStack的children数组仅放入了SUBUH一个按钮,ZUHUR按钮被错误嵌套在SUBUH按钮的点击逻辑里,根本不在组件渲染树中- 多处括号不匹配,语法解析阶段就把组件实例识别成了方法的传入参数
修正后可运行代码
body: Container( height: MediaQuery.of(context).size.height * 0.25, margin: EdgeInsets.all(20), alignment: Alignment.topCenter, child: IndexedStack( index: _selectedIndex, children: [ // SUBUH按钮 ElevatedButton( style: ElevatedButton.styleFrom( minimumSize: const Size.fromHeight(50), ), child: Text('SUBUH'), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => halamansubuh(), ), ); }, ), // ZUHUR按钮,和SUBUH按钮平级放在IndexedStack的children数组中 ElevatedButton( style: ElevatedButton.styleFrom( minimumSize: const Size.fromHeight(100), ), child: Text('ZUHUR'), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => halamanzuhur( title: 'halamanzuhur', desc: 'halamanzuhur', ), ), ); }, ), ], ), )
修复要点
- 调整所有括号的闭合位置,每个
Navigator.push调用仅传入context和MaterialPageRoute两个参数,完全匹配方法的参数要求 - 把误写在点击回调里的ZUHUR按钮移到
IndexedStack的children数组内,保证两个按钮都能正常显示和响应点击 - 统一代码缩进格式,梳理组件嵌套层级,避免后续再出现括号错位的低级语法错误
内容的提问来源于stack exchange,提问作者dammm
相关产品推荐
相关产品推荐

