网络框架是每个应用的基石,封装一个好的网络框架不仅是项目的一个好的开始,并且直接影响到随后项目的稳定性和可扩展性。在移动开发的各个端都有非常赞的网络请求基础框架,比如Android的okhttp库、swift的Almofire库,包括dart的dio库。我们都需要在这些库的基础上封装适合我们项目的网络请求模块,其中包括API的封装、请求类的构造、公共参数的处理、请求头及cookie的处理、日志及拦截器的封装、错误处理及数据实例化。

结合最近的项目梳理下基于dio库封装flutter项目的网络框架封装细节。有对swift项目的网络框架感兴趣的可以看下之前写的一篇文章 【实践】使用“Alamofire+HandyJSON+结构体+泛型”封装网络架构)

简陋的架构图

接下来根据该架构图,细解三个模块的代码。

API Modules

类似于项目中的各个模块,我们需要将api分组,例如UserApis.

代码比较容易理解,通过RequestBuilder构造一个Request,然后通过Net进行请求,结合架构图很容易理解。这里通过NetError进行错误封装并通过回调函数,交由具体的API调用处进行处理。

Request Builder

这里我们定义一个Request类,包含了每个请求的具体配置,包括请求地址、请求参数、请求方法、是否需要加解密。然后封装一个Requst的构造者RequestBuilder。

Request Sender

最后也是最重要的一步,根据第二步提供的Request配置,通过dio进行请求的发送,这里分三小步:公共性配置、发送请求、解析数据。

公共性配置

包括:header、content-Type、responseType、connectTimeout(超时时长设置)、interceptor(拦截器);我们将这些内容配置在初始化dio的地方。

发送请求

这段代码在基于公共性配置 的基础上,结合Request和公共参数提供类配置这次请求的请求参数,并发送get或post请求。

解析数据

最后一步比较简单,对请求结果进行处理。根据Request配置进行解密或直接功过convert库获取json数据,最终回调给API Module层,进行数据的实例化。

至此完结,整个流程还是比较明了的。

dio设置自定义post请求_基于dio库封装flutter项目的标准网络框架相关推荐

  1. dio设置自定义post请求_使用Dio封装ajax的post和get操作

    dio是经常使用到的一个包,为flutter的日常开发提供了很多支持.本文主要描述如何使用Dio封装ajax请求. dio的依赖:dependencies: dio: 3.0.8 dio包的导入:im ...

  2. dio设置自定义post请求_强大的dio封装,可能满足你的一切需要

    dio是一个强大的Dart Http请求库,支持Restful API.FormData.拦截器.请求取消.Cookie管理.文件上传/下载.超时.自定义适配器等.. 基本使用 添加依赖 depend ...

  3. dio设置自定义post请求_flutter中dio的post请求方式使用总结

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 1 引言 dio用来在flutter跨平台开发中访问网络的框架,在使用的时候,我们首先是引入依赖 depen ...

  4. dio设置自定义post请求_Flutter 使用dio来发起网络请求以及Cookie管理

    说点儿闲话 Flutter官方建议您使用 dio 来发起网络请求,在学习过程中,也尝试过用dart io中的HttpClient发起的请求,这里主要讲一下dio的使用以及CookieJar.Cooki ...

  5. dio设置自定义post请求_Flutter中的http网络请求

    前言 由于刚过完年工作比较紧张,文章已经四周没有更新了,非常抱歉!接下来依然会尽量保持每周更新! 本篇介绍Flutter中网络请求相关api的使用,Flutter在Flutter engine中提供了 ...

  6. layui table reload post请求_基于Layui组件封装的后台模版

    HG框架简介 HG-Layui-UI框架,是基于layui最新版UI搭建的一套通用后台管理框架,借鉴了市面上各大主流框架风格,采用iframe标签页实现,保留了传统开发模式的简单实用性. 为快速开发减 ...

  7. dio设置自定义post请求_Flutter Dio简单二次封装和自定义Header

    话不多说自己看代码封装的比较简单,比较适合入门学习Dio. import 'package:dio/dio.dart'; import 'Api.dart'; /* * 封装 restful 请求 * ...

  8. dio设置自定义post请求_flutter Dio封装get/post请求

    最近刚学flutter,参考简书大佬们的文章,使用dio简单封装了一下网络请求工具类. 依赖版本 9683BF5F-1627-47F1-AE3A-ECBC55ED49CF.png 网络请求单例 A2F ...

  9. 同时多个axios请求_用 React+Antd 封装 Axios 实现全局 Loading 效果

    前言 今天在做 react 后台管理的时候要实现一个全局 Loading 效果,通常使用 axios 库与后端进行数据交互.为了更好的用户体验,在每次请求前添加一个加载效果,让用户知道在等待加载. 要 ...

最新文章

  1. 剑指Offer(Java实现)把二叉树打印成多行
  2. 头条一面竟然问我Maven?
  3. 同软件多个线程设置不同ip_多线程--面试知识
  4. java B2B2C Springcloud多租户电子商城系统-集成项目简介
  5. css --- 行内框和内容区
  6. python画环形图_用Python把图做的好看点:用Matplotlib画个环形图
  7. Spring Boot文档阅读笔记-使用Spring Data JPA连接多源数据库(MySQL和Oracle)
  8. 大咖面对面 | 陈果果博士谈智能语音
  9. kafka集群安装部署
  10. MS CRM 2013 Plugin 注册工具登录后空白
  11. Android开发之蓝牙(Bluetooth)---源码目录
  12. 一个悄然成为世界最流行的操作系统
  13. 相亲交友小程序的盈利点
  14. android 模拟器测试之旅
  15. [迁移] Luac的使用
  16. 简明现代魔法 php,PHP生成强密码
  17. Vue属性书写顺序推荐:
  18. 关于PC端QQ无法加载群文件和打开在线群文件解决方法
  19. C#渐变色方法 实例
  20. 计算机操作系统是什么?

热门文章

  1. python垃圾回收价格表_主流的垃圾回收机制都有哪些?
  2. python效率低为什么_为什么我的工作效率降低了?
  3. java fst 入门 例子,Java FST.save方法代码示例
  4. python猴子选大王_“猴子选大王” 算法 python实现
  5. DSP中两个延时函数的区别(转)
  6. vscode 文件编码转换_荐几个让你开发效率“飞起”的VS Code 插件
  7. linux动态链接库的创建
  8. 熟悉mysql数据库设计和性能优化_Mysql数据库性能优化
  9. 中文论文万能句型_干货|SCI论文写作的万能句型~
  10. 帝国cms数据库php调用tag,帝国CMS列表内容模板调用TAG的两种方法