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

使用Navigator.of(context).push()跳转页面时出现多类Dart语法错误,求解决

解决Navigator跳转时的语法错误问题

嘿,这问题我熟!你写的MaterialPageRoute的builder函数语法完全写错了,才导致了这一堆报错,咱们一步步来修正:

错误原因拆解

咱们先看看你触发的几个错误都是因为同一个语法问题:

  • 函数表达式不能包含名称:你把context直接写在builder:后面的大括号前,这相当于试图给匿名函数命名,Flutter里builder需要的是一个接收BuildContext参数的匿名函数,参数必须放在括号里,比如(context)。
  • 不是常量表达式/非可选参数不能有默认值:这俩都是前面语法错误引发的连锁报错,编译器完全误解了你的代码逻辑,以为你在给参数设置默认值,修正语法后这些错误会自动消失。
  • 参数类型不匹配:因为builder的写法错误,导致整个MaterialPageRoute的类型不符合Navigator.push的要求,最终报了类型不兼容的错误。

修正后的代码

把builder的写法改成标准的匿名函数形式就行,有两种写法都可以:

写法1:箭头函数(简洁版)

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Are You Present?',
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: FlatButton(
            onPressed: () {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (context) => HomePage() // 这里改成箭头函数,参数放在括号里
                )
              );
            }, 
            child: Text("Press to Continue")
          ),
        ),
      )
    );
  }
}

写法2:带大括号的匿名函数(适合多逻辑场景)

如果之后需要在builder里加更多逻辑,可以用这种写法:

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) { // 参数放在括号里,函数体用大括号包裹
      // 这里可以加额外逻辑,比如打印日志
      print("跳转到HomePage");
      return HomePage();
    }
  )
);

小提醒

记住,Flutter里所有需要接收BuildContext的builder函数,参数都必须用括号括起来,比如(context),不能直接把参数名写在大括号前面哦!

内容的提问来源于stack exchange,提问作者Aagam Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:27:44