-1

我遇到了这个奇怪的异常,它不断出现并冻结我的应用程序。
我尝试使用提供程序包处理 http 包中的SocketExceptionTimeOutException 。

class Auth with ChangeNotifier{
..........
Future<User> getUser(String id) async {
try {
final user = (await http.post("${Domain.ADDRESS}/user",
      headers: {"auth-token": _token}, body: {"userId": id}))
  .body;
 } on SocketException {
 throw HttpException("DISCONNECTED");
 } on TimeoutException {
 throw HttpException("TIMEOUT");
}  catch (error) {
 print(error);
  throw HttpException("SOMETHING_WENT_WRONG");
  }
 notifyListeners();
 return userdata;
 }
   ......
 }

当互联网在未连接的应用程序中冻结时

on SocketException {
throw HttpException("DISCONNECTED");  <------------ Exception has occurred.
                                                  HttpException (DISCONNECTED)

但我在下一个屏幕上处理这个

 @override
  Future<void> didChangeDependencies() async {
 ......

 setState(() {
 isLoading = true;
 });
 try{
   user= await Provider.of<Auth>(context)
  .getUser(Provider.of<Auth>(context).userId);
 if (this.mounted) {
  setState(() {
    isLoading = false;
  });
    }
 
    }on HttpException catch(error){
    if(error.toString().contains("DISCONNECTED")){
        Scaffold.of(context).showSnackBar(SnackBar(content: Text("Please check your internet 
 connection"),));
    }
   }catch(error){
     print(error);
   }
  super.didChangeDependencies();
}

自定义 HttpException.dart

class HttpException implements Exception {
final String message;
HttpException(this.message);
@override
String toString() {
return message;
}
}
4

2 回答 2

1

因此,如果我理解正确,即使您正确捕获了异常,您的 IDE 也会在抛出异常时暂停

您能告诉我恢复/取消暂停您正在使用的 IDE 后会发生什么,它的行为是否符合预期并打印出来?

if(error.toString().contains("DISCONNECTED")){
        Scaffold.of(context).showSnackBar(SnackBar(content: Text("Please check your internet 
 connection"),));

因为如果是这样,这意味着您可能在All Exceptions上设置了Breakpoints,而不仅仅是Uncaught Exceptions

可视化代码运行选项卡的图像

于 2020-10-15T06:58:20.543 回答
0

我也遇到了这个问题,我发现这是由于我的 Flutter beta/dev 版本有问题。

解决方案
我通过将频道更改为稳定版并升级到最新版本来修复它。

flutter channel stable
flutter upgrade

如果需要,您还可以将频道更改为 master 以拥有 Flutter 的最新功能。但我真的建议使用 stable 频道,因为它更稳定,而且最近刚刚发布了一个新的稳定版本。

这是您遇到的问题的链接:
https ://github.com/flutter/flutter/issues/66488

于 2020-10-14T16:39:55.210 回答