Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何处理颤振中的Dio超时错误?_Flutter_Dart_Dio - Fatal编程技术网

Flutter 如何处理颤振中的Dio超时错误?

Flutter 如何处理颤振中的Dio超时错误?,flutter,dart,dio,Flutter,Dart,Dio,我正在使用Dio处理API函数 这是我的密码: Future<List<ItemModel>> getItems() async { try { Response response = await dio.get("$_apiUrl$_itemEndPoint", options: Options(headers: { "Accept": 'application/json', }))

我正在使用Dio处理API函数

这是我的密码:

  Future<List<ItemModel>> getItems() async {
    try {
      Response response = await dio.get("$_apiUrl$_itemEndPoint",
          options: Options(headers: {
            "Accept": 'application/json',
          }));

      List<ItemModel> _items = List<ItemModel>();

      response.data['data']?.forEach((c) {
        _items.add(ItemModel.fromMap(c));
      });
      return _items;
    } catch (e) {
      throw (e);
    }
  }
Future getItems()异步{
试一试{
Response-Response=wait-dio.get(“$\u-apirl$\u-itemEndPoint”,
选项:选项(标题:{
“接受”:“应用程序/json”,
}));
列表_items=List();
答复.数据['data']?.forEach((c){
_items.add(ItemModel.fromMap(c));
});
退货(物品);;
}捕获(e){
投掷(e);
}
}

如何捕获基于发送和接收超时的错误?

使用
Future.delayed

  Future<List<ItemModel>> getItems() async {
    Future.delayed(Duration(milliseconds: 500), () {
      Response response = await dio.get("$_apiUrl$_itemEndPoint",
          options: Options(headers: {
            "Accept": 'application/json',
          }));

      List<ItemModel> _items = List<ItemModel>();

      response.data['data']?.forEach((c) {
        _items.add(ItemModel.fromMap(c));
      });
      return _items;
    } 
  });
  }
Future getItems()异步{
延迟(持续时间(毫秒:500),(){
Response-Response=wait-dio.get(“$\u-apirl$\u-itemEndPoint”,
选项:选项(标题:{
“接受”:“应用程序/json”,
}));
列表_items=List();
答复.数据['data']?.forEach((c){
_items.add(ItemModel.fromMap(c));
});
退货(物品);;
} 
});
}

有关更多信息,请看他们的一个和他们的:

试试看{
等待Dio()。获取(“https://does.not.exist");
}关于错误捕获(e){
if(e.type==DioErrorType.connectTimeout){
// ...
}
if(e.type==DioErrorType.receiveTimeout){
// ...
}
}

您可以使用try catch for Timeout exception并根据自己的情况处理它

使用dio管理超时异常:

蜂房

 class ApiRepositary {
  Dio dio;

  ApiRepositary() {
    if (dio == null) {
      BaseOptions options = new BaseOptions(
          baseUrl: "your base url",
          receiveDataWhenStatusError: true,
          connectTimeout: 60*1000, // 60 seconds
          receiveTimeout: 60*1000 // 60 seconds
          );

      dio = new Dio(options);
    }
  }

  Future<LoginResponse> getLoginDetails(var loginRequestData) async {
    try {
      Response response = await dio.post("/authenticate", data: loginRequestData);
      final LoginResponse loginResponse = LoginResponse.fromJson(response.data);
      return loginResponse;
    }on DioError  catch (ex) {
      if(ex.type == DioErrorType.CONNECT_TIMEOUT){
        throw Exception("Connection  Timeout Exception");
      }
      throw Exception(ex.message);
    }
  }

}

您需要首先定义DIO选项:

 BaseOptions options = new BaseOptions(
  baseUrl: "http://example.org",
  connectTimeout: 5000,
  receiveTimeout: 3000,
);
然后:

Dio dio = new Dio(options);

var jsonNews = await dio.get(
        'http://example.org/v2/everything?q=bitcoin&from=2020-01-24&sortBy=publishedAt&apiKey=7f3c604b6e2245c88se50lzx02dc9cac1e2');
资料来源:


伙计,receiveDataWhenStatusError对dio选项有什么作用?我读了文档,仍然不明白它是做什么的。嗨@Flux,这里你得到了errorBody响应exception.message.error这里的exception是dioException。
Dio dio = new Dio(options);

var jsonNews = await dio.get(
        'http://example.org/v2/everything?q=bitcoin&from=2020-01-24&sortBy=publishedAt&apiKey=7f3c604b6e2245c88se50lzx02dc9cac1e2');