import 'dart:convert'; import 'package:dio/dio.dart'; class Response { late int code; String? message; dynamic data; Response({ required this.code, this.message, this.data, }); factory Response.fromJson(dynamic str) => Response.fromMap(jsonDecode(str) as Map); factory Response.fromMap(Map resp) => Response( code: resp['code'], message: resp['message'], data: resp['data'], ); } Dio createRequest() { var options = BaseOptions( baseUrl: 'https://www.xx.com/api', connectTimeout: 5000, receiveTimeout: 3000, ); var dio = Dio(options); dio.interceptors.add(InterceptorsWrapper( onRequest:(options, handler){ // Do something before request is sent return handler.next(options); //continue // If you want to resolve the request with some custom data, // you can resolve a `Response` object eg: `handler.resolve(response)`. // If you want to reject the request with a error message, // you can reject a `DioError` object eg: `handler.reject(dioError)` }, onResponse:(response,handler) { Response resp = Response.fromJson(response.data['data']); if (resp.code == 1000) { response.data = resp.data; return handler.next(response); } else { return handler.reject(response.data); } }, onError: (DioError e, handler) { // Do something with response error return handler.next(e);//continue // If you want to resolve the request with some custom data, // you can resolve a `Response` object eg: `handler.resolve(response)`. } )); return dio; } var instance = createRequest(); Future request (RequestOptions options) async { var resp = await instance.fetch(options); if (resp.data.runtimeType == String) { String dt = resp.data as String; dt.trim(); if (dt.startsWith('{') && dt.endsWith('}')) { return jsonDecode(dt); } return dt; } return resp.data; }