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

