Flutter之异常处理

Flutter之异常处理,第1张

Flutter之异常处理

一、前言:

flutter的异常处理与java非常相似。与java不同的是Dart不检测是否是声明的,也就是说方法或者函数不需要声明要抛出哪些异常

二、抛出异常的三种方式
void textException(){
	throw Exception("方式一");
}
void textException(){
	throw ("方式二");
}
void textException()=>throw ("方式三");
三、异常捕获格式
try{
//逻辑代码块
}catch(e,r){
//处理代码块
}
//try:如果try语句中发生异常那么相应的异常对象就会被抛出,
//处理后就会跳过try语句块中剩下的执行内容,从catch语句的第一条开始执行

//e:异常对象

//r:StackTrace对象说白了就是更详细的打印出异常信息的位置

举例

void textException()=>throw ("异常抛出");
try {
textException();
}catch(e,r){
print(e.toString());
print(r.toString());
}
四、try-on-catch语句

如果try代码块中有许多语句就会发生异常,而且发生异常的种类很多,那么可以使用on关键字,on关键字可以捕获到某种异常,但是获取不到异常对象
举例

void textException(){
	throw Exception("这是一个Exception异常");
}
void FormatException(){
	throw Exception("这是一个FormatException异常");
}
try{
textException();
}on FormatException catch(e){
print(e.toString());
}catch(e,r){
print(e);
}
五、重新抛出异常

在捕获异常中,同时允许继续传播,使用rethrow关键字,重置堆栈跟踪到最后抛出位置

举例

void textException(){
	throw Exception("这是一个Exception异常");
}
try{
	text();
}catch(e,r){
print(e.toString());
}
void text(){
	try{
	textException();
	}catch(e){
	print(e.toString());
	rethrow;
	}
}

结果

 Exception("这是一个Exception异常");
 Exception("这是一个Exception异常");
六、finally语句

无论是否有异常都会执行,例如网络连接,数据库链接和打开链接在完成使用后需要释放资源

举例

try{}catch(e){}finally{}
六、自定义异常

以http请求异常为例

enum StatusType{
	DEFAULT,
	STATUS_404,
	STATUS_500
}
void main(){
	httpResponse();
}
class StatusExpection implements Exception{
	StatusType type;
	String msg;
	StatusExpection ({StatusType.DEFAULT,msg});
	String toString(){
		return msg??"http请求异常";
	}
}
Future httpResponse() async{
try{
	var url = "httpxxxx";
	http.get(url).then((res){
	print("${res.statusCode}");
	if(res.statusCode == 200){
	return response;
	}else if(res.statusCode == 404){
	throw StatusExpection(type:StatusType.STATUS_404,msg:"找不到页面");
	}else if(res.statusCode == 500){
	throw StatusExpection(type:StatusType.STATUS_500,msg:"服务器内部错误");
	}
})
	}catch(e,r){
	print(e);
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存