https://www.jianshu.com/p/5ead0cf96642
封裝網絡請求的幾個好處:
1、便於統一配置請求參數,如header,公共參數,加密規則等
2、方便調試,日志打印
3、優化代碼性能,避免到處濫new對象,構建全局單例
4、簡化請求步驟,只暴露需要的響應數據,而對錯誤的響應統一回調
5、對接口數據的基類封裝,簡化解析流程
效果示例:https://github.com/sundaysmeSwift/FlutterNetDio.git

image.png
HttpManager的定義
構造全局單例,配置請求參數,配置通用的GET\POST,支持baseUrl的切換
class HttpManager { static HttpManager _instance = HttpManager._internal(); Dio _dio; factory HttpManager() => _instance; ///通用全局單例,第一次使用時初始化 HttpManager._internal({String baseUrl}) { if (null == _dio) { _dio = new Dio(new BaseOptions( baseUrl: Address.BASE_URL_RELEASE, connectTimeout: 15000)); _dio.interceptors.add(new LogsInterceptors()); _dio.interceptors.add(new ResponseInterceptors()); } } static HttpManager getInstance({String baseUrl}) { if (baseUrl == null) { return _instance._normal(); } else { return _instance._baseUrl(baseUrl); } } //用於指定特定域名,比如cdn和kline首次的http請求 HttpManager _baseUrl(String baseUrl) { if (_dio != null) { _dio.options.baseUrl = baseUrl; } return this; } //一般請求,默認域名 HttpManager _normal() { if (_dio != null) { if (_dio.options.baseUrl != Address.BASE_URL_RELEASE) { _dio.options.baseUrl = Address.BASE_URL_RELEASE; } } return this; } ///通用的GET請求 get(url, params, {noTip = false}) async { Response response; try { response = await _dio.get(url, queryParameters: params); } on DioError catch (e) { return resultError(e); } if (response.data is DioError) { return resultError(response.data['code']); } return response.data; } ///通用的POST請求 post(url, params, {noTip = false}) async { Response response; try { response = await _dio.post(url, data: params); } on DioError catch