Dio 3.0发布,支持Flutter Web 和 Http/2.0
Flutter 一周前发布了1.9 版本,其中最大特性是将Flutter Web合入了主分支。而今天,Dio 也正式发布了3.0.0,该版本最大的特性是支持Flutter Web 和 Http/2.0。
升级提示:由于Dio 3.0需要支持Flutter Web,需要对代码进行较大的重构,所以并不能完全向下兼容,2.1版本用户可参考 3.0升级指南 。
支持Flutter Web
开发者只需要将Flutter升级到1.9或更新的dev版本,然后将Dio升级到最新的3.x即可支持Flutter Web即可。
Http/2.0支持
Http/2.0 有链接复用、头部压缩、二进制传输、服务端推送等重多特性。Dio 3.0版本后,官方提供了一个 dio_http2_adapter 插件(HttpClientAdapter)来支持Http/2.0。下面是官方示例:
import 'package:dio/dio.dart'; import 'package:dio_http2_adapter/dio_http2_adapter.dart'; main() async { var dio = Dio() ..options.baseUrl = "https://google.com" ..interceptors.add(LogInterceptor()) ..httpClientAdapter = Http2Adapter( ConnectionManager(idleTimeout: 10000), ); Response<String> response; response = await dio.get("/?xx=6"); print(response.data); }
可以看到只需要配置一下Http2Adapter即可。值得注意的是Http2Adapter需要一个ConnectionManager参数。ConnectionManager 主要职责是管理链接,是Http/2.0中链接复用策略的实现载体。官方提供了一个默认的ConnectionManager ,它的策略是同一个域名下的请求共享一个Socket链接,当请求完成时,连接默认继续保持15秒,开发者可以通过idleTimeout来自定义保持时间。开发者提供自己的ConnectionManager来自定义链接复用策略。
另外,Http2Adapter内部已经默认处理了重定向,我们可以通过以下代码验证:
response.redirects.forEach((e){ print("redirect: ${e.statusCode} ${e.location}"); });
输出:
redirect: 301 https://www.google.com/?xx=6 redirect: 302 https://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=https://www.google.com.hk/%3Fxx%3D6&ust=1568810110125304&usg=AOvVaw0YbFhKFoslI0LPOPFcekGy redirect: 302 https://www.google.com.hk/?xx=6
可以看到我们在大陆请求google时进行了三次重定向!
其它更新
- FormData 支持嵌套。
- 删除了
UploadFileInfo类,引入了MultipartFile
类;MultipartFile
类不仅支持通过文件来构造上传头块,也支持通过Stream、Byte数组、字符串来构造。 - 将CookieManager抽离成了单独的包;这是因为在Flutter web中不需要手动管理Cookie(浏览器会自动管理),因此将其抽为单独的插件按需引入会更合理。
- 请求取消后,取消Error可以入队拦截器队列(2.1中取消的异常是直接抛给用户处理)。
- 代码优化:API标准化、语义化;对核心代码进行了全部重构。
详情请参考:https://github.com/flutterchi... 。
相关推荐
csdnYF 2020-11-15
SemiraChen 2020-10-10
YejiaSun 2020-09-27
csdnYF 2020-09-20
FrankAbagnale 2020-09-15
wmd看海 2020-07-27
szintu 2020-07-05
chaoxiao 2020-07-04
wmd看海 2020-06-27
龙衣 2020-06-26
龙衣 2020-06-09
龙衣 2020-06-08
wmd看海 2020-06-04
Samlss 2020-06-04
wmd看海 2020-06-04
csdnYF 2020-05-30
androidgjw 2020-05-28
wmd看海 2020-05-28
wmd看海 2020-05-19