You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:27:29