Flutter 一周前发布了1.9 版本,其中最大特性是将Flutter Web合入了主分支。而今天,Dio 也正式发布了3.0.0,该版本最大的特性是支持Flutter Web 和 Http/2.0。git
升级提示:因为Dio 3.0须要支持Flutter Web,须要对代码进行较大的重构,因此并不能彻底向下兼容,2.1版本用户可参考 3.0升级指南 。github
开发者只须要将Flutter升级到1.9或更新的dev版本,而后将Dio升级到最新的3.x便可支持Flutter Web便可。web
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内部已经默认处理了重定向,咱们能够经过如下代码验证:bash
response.redirects.forEach((e){
print("redirect: ${e.statusCode} ${e.location}");
});
复制代码
输出:async
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时进行了三次重定向!优化
MultipartFile
类;MultipartFile
类不只支持经过文件来构造上传头块,也支持经过Stream、Byte数组、字符串来构造。详情请参考:github.com/flutterchin… 。ui