flutter dio+rxdart
线上flutter 接口请求基本架构(线上实际项目搭建 不多讲直接上代码)
首先添加库: pubspec.yaml 目录下:
dio: ^2.1.2 #dio 请求框架rxdart: ^0.21.0 #rx框架
复制代码
接口请求工具类:
class ApiDio {static ApiDio instance;static ApiService apiService;ApiDio(){var options = new BaseOptions(connectTimeout: 5000,receiveTimeout: 3000,baseUrl:TTicarConfig.baseUrl,// api 头部例如 https://www.baidu.comcontentType: new ContentType('application', 'x-www-form-urlencoded',charset: 'utf-8'));Dio dio = new Dio(options);dio.interceptors.add(AuthInterceptor());// 添加 tokendio..interceptors.add(LogInterceptor(responseBody: true, requestBody: true)); //添加日志apiService= new ApiService(dio);}static ApiService getInstance() {if (instance == null) {instance = new ApiDio();}return _getApiService();}static ApiService _getApiService() {return apiService;}
}
/// AuthInterceptor
///
/// 添加header认证
class AuthInterceptor extends Interceptor {String PLATFORM = "android";//可根据代码进行判断String CLIENT = "store";@overrideonRequest(RequestOptions options) async{Map<String, String> headers = new Map();headers["Accept-Charset"] = "utf-8";headers["Connection"] = "keep-alive";headers["Accept"] = "*/*";headers["x-version"] = TTicarConfig.VERSION_NAME;//自己更改配置headers["x-platform"] = PLATFORM;headers["x-client"] = CLIENT;headers["x-equCode"] = TTicarConfig.equCode;//自己更改配置headers["Authorization"] = TTicarConfig.TOKEN;//自己更改配置options.headers=headers;return super.onRequest(options);}}
复制代码
设置请求类型(post get 可自己添加想要的类型)
class ApiService {ApiService(this.dio);Dio dio;//get请求结构Future _get(String url, {Map<String, dynamic> params}) async {var response = await dio.get(url, queryParameters: params);return response.data;}//postFuture _post(String url, Map<String, dynamic> params) async {var response = await dio.post(url, data: params);return response.data;}Observable post(String url, Map<String, dynamic> params) =>Observable.fromFuture(_post(url, params)).asBroadcastStream();Observable get(String url, {Map<String, dynamic> params}) =>Observable.fromFuture(_get(url, params: params)).asBroadcastStream();}
复制代码
设置请求接口的工具类 (这不可以精简不需要或者通过注解的方式)
class TTicarWork {/** 我的收藏商品列表* */Observable loadCollectGood(String pageNum, String pageSize) {Map<String, String> map = new Map();map["pageNum"] = pageNum;map["pageSize"] = pageSize;return ApiDio.getInstance().get("collection/good/list", params: map);}}
复制代码
请求接口
new TTicarWork().loadCollectGood(pageNum, "20").listen((request) {//接口请求成功 (request为map) 自己设置解析数据}, onError: (e) {//请求异常等});
复制代码
目前这个框架的缺陷 (如有更好的操作进行@我,我会逐渐修复)
1.没有通过注解的方式进行请求数据
2.没有自动解析数据
3.没有对网络进行判断(可以自行添加拦截器进行拦截判断)复制代码
转载于:https://juejin.im/post/5cc7f79cf265da03775c5de5
flutter dio+rxdart相关推荐
- Flutter Dio的简易封装和demo
flutter_net_demo 一个简单的flutter dio的封装, 包括: 日志打印, 网络进度, 返回json转bean, get post upload方法的封装, 简易可直接运行的dem ...
- Flutter Dio 网络接口与请求数据
Flutter Dio 网络接口与请求数据 想了想,感觉没什么好说的,像什么get,post,delete,download啥的,基本插件的使用文档都有,没什么好说的,但是我们实际项目写的时候,可不能 ...
- Flutter - dio 简单二次封装
demo 地址: https://github.com/iotjin/jh_flutter_demo Flutter Dio简单二次封装和自定义Header Flutter Dio二次封装 Flutt ...
- Flutter —— dio
Flutter -- dio 1. 关于import 2. pubspec 3. Dio 4. 替换项目三方库 1. 关于import import 中 as关键字来给他起了个别名来避免类名.方法名冲 ...
- Flutter dio XMLHttpRequest error
Flutter dio XMLHttpRequest error 原文:https://blog.csdn.net/weixin_44259356/article/details/105601933 ...
- flutter dio 示例
GIT HUB常常打不开,保存一份以方便随时查看. 示例 发起一个 GET 请求 : Response response; var dio = Dio(); response = await dio. ...
- Flutter dio 使用 注意事项
dio 配置抓包代理 需要通过以下代码才能设置代理. //是否开启抓包功能static const bool isProxyEnable = true;//设置代理服务器地址和端口static con ...
- Flutter dio 文件上传下载
Dio 是Flutter 网络请求的Pub包 Dio除了常用的get post 还可以文件下载 上传等操作 关于文件分片上传 或者文件下载 用到的pub 包 #文件选择file_selector: ^ ...
- Flutter Dio包网络请求抓包解决方案
在Flutter中进行网络请求时,我们可以使用的库有3个,即Http请求库.HttpClient请求库和Dio请求库(详细介绍请参考:Flutter开发之Http网络请求),使用得最多的就是Dio请求 ...
最新文章
- 讯飞语音识别_讯飞输入法持续功能创新 语音输入最受用户认可
- Java黑皮书课后题第3章:*3.25(几何:交点)第一条直线上面的两个点是(x1,y1)(x2,y2),第二条(x3,y3)(x4,y4),通过Cramer规则求出线性方程组
- 文件写入的6种方法,这种方法性能最好
- JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化
- 穿越剧_张宇鑫:穿越剧——从皇帝到乞丐
- android组建之间通信_Android各组件/控件间通信利器之EventBus
- linux内核参数备注
- VC限制只能输入常规数字的CEdit控件
- LiteOS内核源码分析:位操作模块
- yocto生成各种格式的文件系统
- C++常识“屯”和“烫”
- LINUX设备驱动模型之class
- linux使用小命令使用汇集
- 凨-百度地图API之地图标注(JS版),地理位置信息,根据地址获取经度纬度
- 软件测试-微信红包测试点
- Windows与Linux的UEFI引导修复教程
- Vscode下中文乱码问题
- Selenium:鼠标、键盘事件
- 苹果鼠标驱动_一款鼠标让工作更高效——咪鼠S2智能语音鼠标测评
- KANO 模型——卡诺模型