Flutter Dio源碼分析(一)--Dio介紹

創(chuàng)新互聯(lián)建站是專業(yè)的集美網站建設公司,集美接單;提供做網站、網站設計,網頁設計,網站設計,建網站,PHP網站建設等專業(yè)做網站服務;采用PHP框架,可快速的進行集美網站開發(fā)網頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網站,專業(yè)的做網站團隊,希望更多企業(yè)前來合作!
Flutter Dio源碼分析(二)--HttpClient、Http、Dio對比
Flutter Dio源碼分析(三)--深度剖析
Flutter Dio源碼分析(四)--封裝
Flutter Dio源碼分析(一)--Dio介紹視頻教程
Flutter Dio源碼分析(二)--HttpClient、Http、Dio對比視頻教程
Flutter Dio源碼分析(三)--深度剖析視頻教程
Flutter Dio源碼分析(四)--封裝視頻教程
github倉庫地址
本文會手把手教你該怎么去封裝一個類庫,平時在我們的工作中都是拿著別人的造好的輪子在使用,這篇文章將帶你怎么去自己造輪子,以后再碰到別的類庫需要對其進行封裝的時候提供一個的思路和方法。
在前面的文章中,我們對 Dio 的基本使用、請求庫對比、源碼分析,我們知道 Dio 的使用非常的簡單,那為什么還需要進行封裝呢?有兩點如下:
當組件庫方法發(fā)生重要改變需要遷移的時候如果有多處地方用到,那么需要對使用到的每個文件都進行修改,非常的繁瑣而且很容易出問題。
當不需要 Dio 庫的時候,我們可以隨時方便切換到別的網絡請求庫,當然 Dio 目前內置支持使用第三方庫的適配器。
因為一個應用程序基本都是統(tǒng)一的配置方式,所以我們可以針對 攔截器 、 轉換器 、 緩存 、 統(tǒng)一處理錯誤 、 代理配置 、 證書校驗 等多個配置進行統(tǒng)一管理。
因為我們的應用程序在每個頁面中都會用到網絡請求,那么如果我們每次請求的時候都去實例化一個 Dio ,無非是增加了系統(tǒng)不必要的開銷,而使用單例模式對象一旦創(chuàng)建每次訪問都是同一個對象,不需要再次實例化該類的對象。
這是通過靜態(tài)變量的私有構造器來創(chuàng)建的單例模式
我們對 超時時間 、 響應時間 、 BaseUrl 進行統(tǒng)一設置
因為不管是 get() 還是 post() 請求, Dio 內部最終都會調用 request 方法,只是傳入的 method 不一樣,所以我們這里定義一個枚舉類型在一個方法中進行處理
我們已經把 Restful API 風格簡化成了一個方法,通過 DioMethod 來標明不同的請求方式。在我們平時開發(fā)的過程中,需要在請求前、響應前、錯誤時對某一些接口做特殊的處理,那我們就需要用到攔截器。 Dio 為我們提供了自定義攔截器功能,很容易輕松的實現(xiàn)對請求、響應、錯誤時進行攔截
我們發(fā)現(xiàn)雖然 Dio 框架已經封裝了一個 DioError 類庫,但如果需要對返回的錯誤進行統(tǒng)一彈窗處理或者路由跳轉等就只能自定義了
在我們發(fā)送請求的時候會碰到幾種情況,比如需要對非open開頭的接口自動加上一些特定的參數,獲取需要在請求頭增加統(tǒng)一的 token
在我們請求接口前可以對響應數據進行一些基礎的處理,比如對響應的結果進行自定義封裝,還可以針對單獨的 url 做特殊處理等。
我們看了轉換器的介紹,發(fā)現(xiàn)和攔截器的功能差不多,那為什么還要存在轉換器,有兩點:
執(zhí)行流程: 請求攔截器 請求轉換器 發(fā)起請求 響應轉換器 響應攔截器 最終結果 。
只會被用于 'PUT'、 'POST'、 'PATCH'方法,因為只有這些方法才可以攜帶請求體(request body)
會被用于所有請求方法的返回數據。
在開發(fā)過程中,客戶端和服務器打交道的時候,往往會用一個 token 來做校驗,因為每個公司處理刷新token的邏輯都不一樣,我這里舉一個簡單的例子
為什么我們需要有取消請求的功能,如果當我們的頁面在發(fā)送請求時,用戶主動退出當前界面或者app應用程序退出的時候數據還沒有響應,那我們就需要取消該網絡請求,防止不必要的錯誤。
由 服務器生成 的 一小段文本信息 ,發(fā)送給瀏覽器,瀏覽器把 cookie 以kv形式保存到本地 某個目錄下的文本文件內,下一次請求同一網站時會把該 cookie 發(fā)送給服務器。
cookie 的使用需要用到兩個第三方組件 dio_cookie_manager 和 cookie_jar
因為在我們平時的開發(fā)過程中,會碰到一種情況,在進行網絡請求時,我們希望能正常訪問到上次的數據,對于用戶的體驗比較好,而不是展示一個空白的頁面,該緩存主要是 《Flutter實戰(zhàn)》網絡接口緩存 提供參考。
我們在程序退出后內存緩存將會消失,所以我們用 shared_preferences 進行磁盤緩存數據。
在我們用flutter進行抓包的時候需要配置 Dio 代理。由 DefaultHttpClientAdapter 提供了一個 onHttpClientCreate 回調來設置底層 HttpClient 的代理。
用于驗證正在訪問的網站是否真實。提供安全性,因為證書和域名綁定,并且由根證書機構簽名確認。
日志打印主要是幫助我們開發(fā)時進行輔助排錯
這里的DynamicHabitDetailViewModel實例對象由ChangeNotifierProxyProvider提供,ChangeNotifierProxyProvider組合了兩種功能:
(1)它會自動訂閱DynamicHabitDetailViewModel中的更改(如果您只想使用此功能,只需使用ChangeNotifierProvider)
(2)它采用先前提供的對象的值(在本例中為TeamDetailViewModel,如上所述),并使用它來構建DynamicHabitDetailViewModel的值(如果您只需要此功能,只需使用ProxyProvider,也就是項目中的ChangeNotifierProxyProvider)
這問題,一開始就有。因為忙著忙著也沒管。后來發(fā)現(xiàn)還是很有需要靈活修改代理ip和端口號的。所以得處理一波了。
因為本身做Android出身,就草船借鑒了下Android里的設置點個8下,進入開發(fā)者模式的套路。看到這,系不系心如明鏡般?哈哈~ 摸著Android過河也是可以的。
解決方案有了:
我們設置了20次,點點點吧,減小誤觸幾率。
這個Http代理填寫IP和端口號的頁面,可以新開一個,就是兩個輸入框,點Submit后,重置Dio實例,并把代理設置給HttpClient。
這里需要注意的是,如果你這里重置了client.findProxy,那么一定要重新實例化Dio實例,不然不生效。這一點也可以在源碼中得到印證.
^_^,這就搞完了。還挺簡單的。但是確實解決了很大的問題,也很靈活。大家自行拿去試試吧。
1,執(zhí)行 flutter pub publish--dry-run 檢查是否具備發(fā)布條件
遇到的問題1:
It‘s strongly recommended to include a “homepage“ or “repository“ field
解決方案:在 pubspec. yaml ?中配置 主頁 homepage 地址 :
homepage:
可參考:
2,執(zhí)行 flutter pub publish--server= 發(fā)布
如果執(zhí)行flutter pub publish發(fā)布的話會遇到以下錯誤,國內還是用?flutter pub publish--server= 來發(fā)布
package repository requested authentication! You can provide credential using:pub token add
問題1:It looks like accounts.google.com is having some trouble. Pub will wait for a while before trying to connect again. OS Error: Operation timed out, errno = 60, address = accounts.google.com, port = 53481 pub finished with exit code 69
原因:
1、國內墻;
2、flutter環(huán)境配置添加了國內鏡像
解決方式:
1、翻墻;
2、屏蔽環(huán)境變量里關于flutter的國內鏡像;
屏蔽方式如下:
# export PUB_HOSTED_URL=
# export FLUTTER_STORAGE_BASE_URL=
3、設置終端代理命令(這個是我解決的方式),這個非常重要,不然就會報上面超時錯誤了
如果出現(xiàn):Flutter pub finished with exit code 1
解決方式:flutter packages pub publish --server=
此問題原文鏈接:(畢竟要尊重版權)
問題2:LICENSE這個文件中不能有TODO,也不能為空,可找個flutter庫看看別人是怎么寫的
名稱欄目:flutter代理,flutter代理win瀏覽器要網絡請求
當前鏈接:http://chinadenli.net/article33/dsgohss.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站、定制開發(fā)、網站制作、網站排名、標簽優(yōu)化、手機網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)