一统天下 flutter - dart: 错误处理(assert, try/on/catch/finally)
一统天下 flutter - dart: 错误处理(assert, try/on/catch/finally)
示例如下:
lib\dart\exception.dart
/*
* dart 错误处理(assert, try/on/catch/finally)
*/
import 'package:flutter/material.dart';
import 'package:flutter_demo/helper.dart';
class DartException extends StatelessWidget {
const DartException({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
// assert 的用法
sample1();
// try
sample2();
return const MyWidget(text: "dart_exception");
}
void sample1() {
// assert 断言,条件为假则中断运行
// assert 仅在调试模式下有效
// assert(1 == 2);
// assert(1 == 2, "1 == 2 不成立");
// 构造函数也是可以支持 assert 的
// var a = _MyClass("webabcd", 30.0);
}
void sample2() {
try { // try
throw "this an exception"; // 抛出一个对象,可以是任意类型(建议抛出 Error 或 Exception)
} on Exception { // on 用于指定捕获的类型,如果捕获到的对象是 Exception 类型则执行此句
} on String catch(e, s) { // catch 用于捕获对象,其中 e 是捕获到的对象,s 是堆栈信息(一个 StackTrace 对象),如果捕获到的对象是 String 类型则执行此句
log("ex: $e, $s");
} catch (e) { // 没有 on 的意思就是捕获所有类型的对象,上面的 on 都捕获不到对象的话,就会执行此句
// 建议用 rethrow 抛出未处理异常,而不是用 throw e 抛出(因为这会将堆栈跟踪重置为最后抛出的位置)
rethrow; // 向外抛出捕获到的对象
} finally { // finally
log("finally");
}
}
}
class _MyClass {
String name = "";
double age = 0;
// 构造函数也是可以支持 assert 的
_MyClass(this.name, this.age) : assert(age > 35.0, "age > 35.0 不成立");
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2012-03-22 稳扎稳打Silverlight(67) - 5.0被信任的应用程序之访问本地文件系统, 支持多窗口, 被信任的程序在浏览器中运行, Call Windows API