Flutter调用sideNav报位置参数过多预期0个传入1个错误怎么办
报错根因
报错Too many positional arguments: 0 expected but 1 found.由类名与构造函数命名不匹配触发:
- 你定义的侧边栏组件类名为小写开头的
sideNav - 编写的构造函数名为
Sidenav,不仅首字母大写,拼写大小写和类名完全不一致。Dart语法规则中,若未编写与类名完全匹配的自定义构造函数,会为类自动生成零参数的默认构造函数,因此传入selectedIndex参数时会提示不接收位置参数,所有关联selectedIndex的代码行也会连带标记错误。
修复步骤
- 统一类名与构造函数命名:Dart开发规范要求类名使用大驼峰格式,建议将侧边栏类名修改为
SideNav,构造函数名与类名保持完全一致 - 补全构造函数的
key参数:符合Flutter组件开发规范,避免后续组件状态刷新异常 - 补全
body中Builder的全分支返回逻辑:避免非0索引选中状态下builder返回null触发组件运行错误 - 修正
Scaffold中侧边栏组件的调用名,和修改后的类名保持一致
修正后代码片段
class _JobPostingsState extends State<JobPostings> { int selectedIndex = 0; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Job Postings')), drawer: SideNav(selectedIndex), body: Builder( builder: (context) { if (selectedIndex == 0) { return const Center(child: Text('Selected index is 0')); } // 替换为其他索引对应的页面组件 return const Center(child: Text('Other page content')); } ) ); } } class SideNav extends StatelessWidget { final int selectedIndex; const SideNav(this.selectedIndex, {super.key}); // 此处保留你原有的侧边栏布局build逻辑即可 @override Widget build(BuildContext context) { return Drawer( child: ListView( // 替换为你自己写的侧边栏菜单项代码 children: const [], ), ); } }
内容的提问来源于stack exchange,提问作者ItsPronouncedJif
相关产品推荐
相关产品推荐

