Dart 错误:参数类型';字符串?';can';不能分配给参数类型';字符串';因为';字符串?';可为空且';字符串';isn';T

Dart 错误:参数类型';字符串?';can';不能分配给参数类型';字符串';因为';字符串?';可为空且';字符串';isn';T,dart,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”分配给参

你好, 我一直在尝试以下代码:

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”可为null,而“String”不可为null。 var birthyearint=int.parse(birthyear);
^

该错误是由Dart中的空安全功能引起的,请参阅

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

var birthyearint = int.tryParse(birthyear ?? "");
if (birthyearint == null) {
    print("bad year");
} else {
    var age = 2021-birthyearint;
    print(age);
}
此错误的解决方案;只需添加:
var birthyear=stdin.readLineSync()
;从键盘上读;这个错误也是由Dart中的空安全特性引起的:我尝试了这个并成功通过了。 此链接可以帮助您: .. . . .