错误:参数类型“字符串?”不能分配给参数类型 'String',因为 'String?'可以为空并且“字符串”不是

时间:2021-03-25 11:42:24

标签: dart

美好的一天, 我一直在尝试以下代码:

import 'dart:io';
main (){
print ("write your birth year:");
var birthyear = stdin.readLineSync();
var birthyearint = int.parse(birthyear);
var age = 2021-birthyearint;
print(age);
}

当我运行它时,我收到以下错误:

5:30:错误:参数类型“字符串?”不能分配给参数类型 'String',因为 'String?'可以为空,而 'String' 不是。 varbirthyearint = int.parse(birthyear); ^

2 个答案:

答案 0 :(得分:4)

该错误是由 Dart 中的空安全特性引起的,请参阅 https://dart.dev/null-safety

方法stdin.readLineSync()的结果是String?,即可能是String,也可能是null。方法 int.parse() 需要(非空)String。您应该检查用户是否提供了一些输入,然后您可以使用 birthyear! 断言该值是非空的。更好的是,您应该使用 int.tryParse() 来检查用户输入是否为有效整数,例如:

var birthyearint = int.tryParse(birthyear ?? "");
if (birthyearint == null) {
    print("bad year");
} else {
    var age = 2021-birthyearint;
    print(age);
}

答案 1 :(得分:0)

enter image description here此错误的解决方案;只需添加:var birthyear = stdin.readLineSync();从键盘读取;此错误也是由 Dart 中的 null 安全功能引起的:我尝试过此操作并成功通过。 此链接可能对您有所帮助:https://dart.dev/guides/libraries/library-tour .. . . . .