Dio 3.0發佈,支持Flutter Web 和 Http/2.0

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 Web

開發者只須要將Flutter升級到1.9或更新的dev版本,而後將Dio升級到最新的3.x便可支持Flutter Web便可。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內部已經默認處理了重定向,咱們能夠經過如下代碼驗證: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時進行了三次重定向!優化

其它更新

  • FormData 支持嵌套。
  • 刪除了UploadFileInfo類,引入了MultipartFile類;MultipartFile類不只支持經過文件來構造上傳頭塊,也支持經過Stream、Byte數組、字符串來構造。
  • 將CookieManager抽離成了單獨的包;這是由於在Flutter web中不須要手動管理Cookie(瀏覽器會自動管理),所以將其抽爲單獨的插件按需引入會更合理。
  • 請求取消後,取消Error能夠入隊攔截器隊列(2.1中取消的異常是直接拋給用戶處理)。
  • 代碼優化:API標準化、語義化;對核心代碼進行了所有重構。

詳情請參考:github.com/flutterchin…ui

相關文章
相關標籤/搜索