我在flutter中有一个this bloc实现,因此一旦触发了bloc,它就会如下调用apiCall()函数
\1
这将调用存储库函数repository.getList(),如下所示。
Future apiCall() async {
print("calling api now ");
var future = repository.getList().catchError((err) {
print("api_bloc:Error is " + err.toString());
if(err is AuthError){
print("Auth error");
}
});
}
在上面的代码中,它调用NetworkUtils.postNoToken(url)进行实际的发布并捕获并抛出错误。因此,应该将其包含在上面的函数中,但事实并非如此。下面是实际的帖子。
Future<CountyListRoot> getList() async {
String url = "countyList";
try{
final countyListJson = await NetworkUtils.postNoToken(url).catchError((err) {
print("county list repository is " + err.toString());
if(err is AuthError){
print("catch at repository Auth error");
throw AuthError('Auth Error: ');
}
});
print("countyListJson" + countyListJson.toString());
return CountyListRoot.fromJson(countyListJson);
}
catch(exception){
if(exception is AuthError){
print("catch at repository Auth error");
}
print("Exception");
}
}
所以在上面的场景中,我特意创建了一个生成的场景
static dynamic postNoToken(String url) async {
var uri = host + '/api/'+ url;
try {
final response = await http.post(
uri,
headers: {
);
final code = response.statusCode;
print("Network util post reply code:"+code.toString());
print("Network util post reply response body:"+response.body);
if(code==401){
throw AuthError('$code Auth Error: '+parseMessage(response.body));
}
else if(code>=500){
throw UnknownError('$code. Server error: '+parseMessage(response.body));
}
else if(code>=400){
throw Error4xx(' $code Wrong request : '+parseMessage(response.body));
}
return response.body;
} catch (exception) {
print(exception);
}
}
但是它没有在存储库功能中捕获或显示。 下面我也创建了模型。
if(code==401){
throw AuthError('$code Auth Error: '+parseMessage(response.body));
}
如何解决此错误的捕捉和传递,以便最终通过相应的小吃店或弹出窗口进行显示?
答案 0 :(得分:1)
当您捕获异常时,您需要Equals("ALEXANDER", StringComparison.InvariantCultureIgnoreCase)
以使其可以被调用方捕获。
https://dart.dev/guides/language/effective-dart/usage#do-use-rethrow-to-rethrow-a-caught-exception
因此,当前您在任何地方捕获到的异常都应rethrow
(如果该特定捕获未处理该异常)。
rethrow