我想用一些错误消息来处理http请求抖动,但我在这里收到了太多错误.我只是根据这个建议做的,但对我不起作用.拜托,有没有人,帮帮我 下面是我调用API的函数

getData(data, apiUrl) async {
    var tempUrl = _url + apiUrl + await _getToken();
    Uri uri = Uri.parse(tempUrl);
    var fullUrl = uri.replace(queryParameters: data);
    var res;
    try {
      var response = await http.get(fullUrl, headers: _setHeaders()).timeout(
          const Duration(seconds: 60));
      print(response.statusCode);
      if (response.statusCode != 200) {
        res = {
          "success": false,
          "status": response.statusCode,
          "message": _returnResponse(response)
        };
      }
      else {
        res = response;
      }
    }
    on SocketException {
      throw FetchDataException('No Internet connection');
    }
    on TimeoutException catch (e) {
      res = {
        "success": false,
        "status": response.statusCode,
        "message": "Connection timeout"
      };
    } on Error catch (e) {
      print('Error: $e');
    }

    return res;
  }

这是我对除200之外的其他对象的返回响应

dynamic _returnResponse(http.Response response) {
    switch (response.statusCode) {
      case 400:
        throw BadRequestException(response.body.toString());
      case 401:
      case 403:
        throw UnauthorisedException(response.body.toString());
      case 500:
      default:
        throw FetchDataException(
            'Error occured while Communication with Server with StatusCode : ${response
                .statusCode}');
    }
  }

这是我从StackOverflow和其他论坛得到的app_exception.dart

class AppException implements Exception {
  final _message;
  final _prefix;

  AppException([this._message, this._prefix]);

  String toString() {
    return "$_prefix$_message";
  }
}

class FetchDataException extends AppException {
  FetchDataException([String message])
      : super(message, "Error During Communication: ");
}

class BadRequestException extends AppException {
  BadRequestException([message]) : super(message, "Invalid Request: ");
}

class UnauthorisedException extends AppException {
  UnauthorisedException([message]) : super(message, "Unauthorised: ");
}

class InvalidInputException extends AppException {
  InvalidInputException([String message]) : super(message, "Invalid Input: ");
}

我试了这么多建议,但一点也不管用

我犯了这个错误

错误:‘SocketException’不是类型. 关于SocketException{ ^^

错误:"TimeoutException"不是类型.

推荐答案

我用的是音频包.这比我做的更容易,也更少错误

https://pub.dev/packages/dio

Flutter相关问答推荐

Flutter -带有TextAlign.right的文本字段不显示空白

具有可变高度小部件的SingleChildScrollView内的列

如何使用新的Riverpod语法将依赖传递给AsyncNotifier?

如何在WidgetRef引用外部的函数中使用Riverpod刷新数据

出现异常.RangeError(RangeError(index):无效值:有效值范围为空:0).分度误差

Flutter 图标记移动

如何使用flutter_local_notification包处理通知操作?

Ffltter Firebase向用户添加公司

为什么我的图标的一半在定位小部件中消失了?

Flutter:注册 UI 出现 UI 问题(将注册框提升到顶部并向电话号码 pin 码添加一个框)

网页浏览器不支持鼠标滚动的行项目

Riverpod 2.3.6:AutoDisposeNotifier和ref.onDispose自动处理

允许文本小部件在容器之间溢出

如何在android中 Select 任何文件/文件路径 - Flutter

更改底部导航栏下方 Flutter Snackbar 的位置

如何将行推到列的底部

Agora VideoCall 不显示远程视频网格

如何让小部件根据小部件的大小构建不同的布局?

为什么 Flutter riverpod 直接分配不起作用但方法可以

Flutter Web Responsiveness 效率不高