Dart 入门:使用 tryParse 和空安全校验分钟数
用 int.tryParse 将文本转换为可空整数,组合范围检查与空值判断,理解空安全如何要求调用者处理失败。
本节目标
用 int.tryParse 将文本转换为可空整数,组合范围检查与空值判断,理解空安全如何要求调用者处理失败。
环境与运行方法
安装 Dart SDK 3.x,将源码保存为 lesson.dart,先执行 dart analyze lesson.dart,再执行 dart run lesson.dart。以下为纯 Dart 控制台示例,不依赖 Flutter。
核心思路
int.tryParse 失败返回 null,适合正常输入验证。函数返回 int?,调用处先检查存在性。合法零必须与 null 区分,否则会丢掉真实零时长记录。
完整示例
int? minutes(String text) {
final value = int.tryParse(text);
if (value == null || value < 0 || value > 1440) return null;
return value;
}
void main() {
for (final text in ['30', '0', 'bad', '1441']) {
final value = minutes(text);
print(value == null ? 'invalid' : 'ok=$value');
}
}预期输出
ok=30
ok=0
invalid
invalid逐步理解
final 表示变量只赋值一次,不是让任意对象内部都不能修改。条件中的短路逻辑先排除 null,后续才比较数值范围;通过验证后返回非空整数。
本例没有主动清洗字符串格式,tryParse 的接受范围要与输入协议保持一致。如果界面需要不同错误提示,单个 null 信息不足,可以定义结果类型或错误枚举。空安全能阻止部分误用,但不能替代业务上限检查。
常见问题与边界
- 不要用非空断言 ! 掩盖正常失败分支。
- 可解析整数不一定在允许时长范围内。
- Flutter 的界面状态问题与纯 Dart 解析逻辑应分开测试。
动手练习
加入 "1440"、"-1" 与空文本。
参考答案
1440 合法,其他两项返回 null。若业务允许小数,应改变数值类型和契约,而不是直接截断小数。
文章回复
0 条公开回复