You need to enable JavaScript to run this app. Dart 2.12.0如何正确输入int类型?空安全报错解决
优惠活动
大模型
产品
解决方案
定价
更多

Dart 2.12.0如何正确输入int类型?空安全报错解决

Dart 2.12 输入int类型的报错原因与修复

Dart 2.12 版本正式落地空安全类型系统,类型规则和此前的非空安全版本存在核心差异:

  • stdin.readLineSync() 的返回类型从非空 String 调整为可空 String?,即该方法在终端输入流异常、提前断开的场景下可能返回 null
  • int.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 16:45:04