线上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相关推荐

  1. Flutter Dio的简易封装和demo

    flutter_net_demo 一个简单的flutter dio的封装, 包括: 日志打印, 网络进度, 返回json转bean, get post upload方法的封装, 简易可直接运行的dem ...

  2. Flutter Dio 网络接口与请求数据

    Flutter Dio 网络接口与请求数据 想了想,感觉没什么好说的,像什么get,post,delete,download啥的,基本插件的使用文档都有,没什么好说的,但是我们实际项目写的时候,可不能 ...

  3. Flutter - dio 简单二次封装

    demo 地址: https://github.com/iotjin/jh_flutter_demo Flutter Dio简单二次封装和自定义Header Flutter Dio二次封装 Flutt ...

  4. Flutter —— dio

    Flutter -- dio 1. 关于import 2. pubspec 3. Dio 4. 替换项目三方库 1. 关于import import 中 as关键字来给他起了个别名来避免类名.方法名冲 ...

  5. Flutter dio XMLHttpRequest error

    Flutter dio XMLHttpRequest error 原文:https://blog.csdn.net/weixin_44259356/article/details/105601933 ...

  6. flutter dio 示例

    GIT HUB常常打不开,保存一份以方便随时查看. 示例 发起一个 GET 请求 : Response response; var dio = Dio(); response = await dio. ...

  7. Flutter dio 使用 注意事项

    dio 配置抓包代理 需要通过以下代码才能设置代理. //是否开启抓包功能static const bool isProxyEnable = true;//设置代理服务器地址和端口static con ...

  8. Flutter dio 文件上传下载

    Dio 是Flutter 网络请求的Pub包 Dio除了常用的get post 还可以文件下载 上传等操作 关于文件分片上传 或者文件下载 用到的pub 包 #文件选择file_selector: ^ ...

  9. Flutter Dio包网络请求抓包解决方案

    在Flutter中进行网络请求时,我们可以使用的库有3个,即Http请求库.HttpClient请求库和Dio请求库(详细介绍请参考:Flutter开发之Http网络请求),使用得最多的就是Dio请求 ...

最新文章

  1. 讯飞语音识别_讯飞输入法持续功能创新 语音输入最受用户认可
  2. Java黑皮书课后题第3章:*3.25(几何:交点)第一条直线上面的两个点是(x1,y1)(x2,y2),第二条(x3,y3)(x4,y4),通过Cramer规则求出线性方程组
  3. 文件写入的6种方法,这种方法性能最好
  4. JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化
  5. 穿越剧_张宇鑫:穿越剧——从皇帝到乞丐
  6. android组建之间通信_Android各组件/控件间通信利器之EventBus
  7. linux内核参数备注
  8. VC限制只能输入常规数字的CEdit控件
  9. LiteOS内核源码分析:位操作模块
  10. yocto生成各种格式的文件系统
  11. C++常识“屯”和“烫”
  12. LINUX设备驱动模型之class
  13. linux使用小命令使用汇集
  14. 凨-百度地图API之地图标注(JS版),地理位置信息,根据地址获取经度纬度
  15. 软件测试-微信红包测试点
  16. Windows与Linux的UEFI引导修复教程
  17. Vscode下中文乱码问题
  18. Selenium:鼠标、键盘事件
  19. 苹果鼠标驱动_一款鼠标让工作更高效——咪鼠S2智能语音鼠标测评
  20. KANO 模型——卡诺模型

热门文章

  1. 怎样初始化一个指针数组
  2. xmemcached发布1.3.4
  3. SLS:海量日志数据管理利器
  4. 【白话设计模式二】外观模式(Facade)
  5. Spring中加载xml配置文件的六种方式
  6. MF训练套件(1):如何去除应用标题?
  7. 人工智能——面向对象表示法
  8. discuz模板解析注释
  9. 08年度世界最佳照片(三)
  10. 如家快捷酒店和星级酒店的区别