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

Flutter升级后builder参数不能为空报错,加required无效如何解决?

报错根因

这个报错是Flutter 2.0及以上版本默认启用空安全机制导致的:非空类型的命名参数如果没有指定默认值,必须加required关键字修饰,否则会被编译器判定为可能为null,违反空安全规则。
你之前添加@required无效,是因为@required是旧版Flutter依赖meta包提供的静态提示注解,不满足空安全的强制校验要求,空安全下必须使用Dart内置的不带@符号的required关键字。

修复方案

方案1:参数必须传入(推荐)

如果builder和settings都是使用该类时必须传入的参数,直接给两个参数加内置required修饰即可,修改后构造函数代码如下:

CustomRoute({
  required WidgetBuilder builder,
  required RouteSettings settings,
}) : super(
      builder: builder,
      settings: settings,
    );

方案2:允许参数可选传入

如果settings参数允许不传,可将其标记为可空类型(类型后加?),无需加required:

CustomRoute({
  // builder是父类MaterialPageRoute的必填参数,必须加required保证非空
  required WidgetBuilder builder,
  // settings允许为空,标记为可空类型
  RouteSettings? settings,
}) : super(
      builder: builder,
      settings: settings,
    );
验证注意事项

修改后可执行flutter clean清理缓存后重新编译,确认报错消失。如果仍有同类报错,检查项目pubspec.yaml中Dart SDK版本最低要求是否为>=2.12.0,确认空安全已正确开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:04