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

Dart可选参数报错:int类型参数不能为null的问题咨询

问题原因与解决方案

这确实是Dart版本更新带来的差异,不是你的操作问题。

你学习的旧课程使用的是Dart 2.12之前的版本,那时还没有引入空安全特性。在旧版本中,可选位置参数如果不传入值,默认会被设为null,所以讲师的代码能正常运行并输出Pink Unicorn null。

而现在你使用的是启用了空安全的Dart版本(Dart 2.12及以上),空安全规则要求:非可空类型(比如int)的变量不能被赋值为null。你的代码里age被声明为int类型,但作为可选参数它的隐式默认值是null,这就违反了空安全规则,所以会抛出错误。

两种解决方法

方法1:允许age为null(和旧课程行为一致)

把age的类型改为可空的int?,明确表示这个参数可以接受null值:

import 'package:hello_dart/hello_dart.dart' as hello_dart;

void main(List<String> arguments) {
  var name = sayHello("Pink", "Unicorn");
  print(name);
}

String sayHello(String name, String lastName, [int? age]) => "$name $lastName $age";

运行这段代码就能得到和讲师一样的输出:Pink Unicorn null。

方法2:给age设置非null默认值

如果不想让age为null,可以给它指定一个默认值,比如0:

import 'package:hello_dart/hello_dart.dart' as hello_dart;

void main(List<String> arguments) {
  var name = sayHello("Pink", "Unicorn");
  print(name);
}

String sayHello(String name, String lastName, [int age = 0]) => "$name $lastName $age";

运行后会输出:Pink Unicorn 0。

内容的提问来源于stack exchange,提问作者Xavier Darío Rodríguez Correa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:10:35