Dio 3.0发布,支持Flutter Web 和 Http/2.0

乐肇
• 阅读 5458

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...

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
4年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
莎利亚 莎利亚
4年前
解读 Flutter 全平台开发的误解与偏见
Flutter2.0发布之后,Web版本进入了stable分支,Desktop版本也可以在stable分支通过snapshotbeta镜像开始预览使用,导致最近关于“Flutter制霸全平台”之类的话题又被炒作起来,所以本篇主要对这个话题做一次解答。1、Flutter制霸全平台谷歌官方在F
Stella981 Stella981
4年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这