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
相关产品推荐
相关产品推荐

