Dart 2.12.0如何正确输入int类型?空安全报错解决
Dart 2.12 输入int类型的报错原因与修复
Dart 2.12 版本正式落地空安全类型系统,类型规则和此前的非空安全版本存在核心差异:
stdin.readLineSync()的返回类型从非空String调整为可空String?,即该方法在终端输入流异常、提前断开的场景下可能返回 nullint.parse()方法要求传入的参数必须是非空的 String 类型,不能接受可空的String?类型,因此触发了类型不匹配的报错
常用修复方式
- 简单测试场景直接用非空断言:如果确认终端输入流程不会异常中断,直接在
stdin.readLineSync()后加!强制把可空类型转为非空类型,满足int.parse的参数要求var tahunLahir = int.parse(stdin.readLineSync()!); - 更健壮的生产级写法:增加空值兜底和输入合法性校验,避免程序因为输入异常直接崩溃
// 读取内容为null时兜底为空字符串 var inputContent = stdin.readLineSync() ?? ''; // 用int.tryParse替代int.parse,输入非数字时不会直接抛异常,兜底给默认值0 var tahunLahir = int.tryParse(inputContent) ?? 0;
注意:非空断言
!只有在100%确定值不为null的场景下使用,盲目使用会大幅提升运行时空指针异常的风险。
完整修复后的可运行代码
import 'dart:io'; void main() { var waktuNow = DateTime.now(); var waktuSekarang = waktuNow.year; stdout.write('Masukkan tahun kelahiran kamu : '); var inputContent = stdin.readLineSync() ?? ''; var tahunLahir = int.tryParse(inputContent) ?? 0; hitungTahun(waktuSekarang, tahunLahir); } void hitungTahun(int a, int b) { var lahir = a - b; print('umur kamu : $lahir '); }
内容的提问来源于stack exchange,提问作者arcahyadi
相关产品推荐
相关产品推荐

