古詩詞大全網 - 個性簽名 - 顫振Dio源代碼分析(四)-封裝

顫振Dio源代碼分析(四)-封裝

顫振Dio源代碼分析(1)-Dio簡介

Flutter Dio源代碼分析(二)——Http client、Http和Dior的比較

顫振Dio源代碼分析(3)-深度分析

顫振Dio源代碼分析(四)-封裝

顫振Dio源代碼分析(1) - Dio介紹視頻教程。

撲Dio源代碼分析(2) - HttpClient,Http,Dio對比視頻教程

顫振Dio源代碼分析(三)——深度分析視頻教程

顫振Dio源代碼分析(四)——封裝視頻教程

Github倉庫地址

這篇文章將教妳如何打包壹個類庫。通常,我們在工作中使用別人制造的輪子。本文將向您展示如何制作自己的輪子,並在以後遇到其他類庫需要打包時提供壹種新的思路和方法。

在上壹篇文章中,我們學習了Dior的基本用法、請求庫比較和源代碼分析。我們知道迪奧的用法很簡單,那為什麽還需要包裝呢?有兩點如下:

當構件庫的方法發生重大變化,需要遷移時,如果在很多地方使用,那麽使用的每個文件都需要修改,非常繁瑣,容易出問題。

當不需要Dior庫時,我們可以隨時輕松切換到其他網絡請求庫。當然,Dior目前內置了支持使用第三方庫的適配器。

因為壹個應用基本上是統壹配置的,所以我們可以統壹管理攔截器、轉換器、緩存、統壹錯誤處理、代理配置、證書驗證等配置。

因為我們的應用程序會在每個頁面中使用網絡請求,如果每次請求時都實例化壹個Dior,只會增加系統不必要的開銷。然而,壹旦我們每次用singleton模式對象訪問時都創建了相同的對象,我們就不需要再次實例化這種對象。

這是由靜態變量的私有構造函數創建的單例模式。

我們統壹設置超時、響應時間和BaseUrl。

因為無論是get()還是post()請求,最終都會在Dior內部調用request方法,只是傳入的方法不同,所以我們在這裏定義壹個枚舉類型,用壹個方法來處理。

我們把Restful API風格簡化成了壹個方法,通過DioMethod表示不同的請求方法。在我們通常的開發過程中,在請求之前,在響應之前以及出現錯誤的時候,我們需要對壹些接口做特殊的處理,那麽我們就需要使用攔截器。Dior為我們提供了自定義攔截器功能,可以輕松攔截請求、響應和錯誤。

我們發現,雖然Dio框架封裝了壹個DioError類庫,但是只有在需要在統壹的彈出窗口或者路由跳轉中處理返回的錯誤時,我們才可以自定義它。

我們在發送請求的時候會遇到幾種情況,比如需要自動給不以open開頭的接口添加壹些特定的參數,獲取需要添加到請求頭的統壹令牌。

在請求接口之前,我們可以對響應數據進行壹些基本的處理,比如定制響應結果,以及對單個URL進行特殊處理。

看了轉換器的介紹,我們發現轉換器的功能和攔截器差不多,那麽為什麽轉換器還存在呢?有兩點:

執行過程:請求攔截器>;& gt請求轉換器>;& gt發起請求> & gt響應轉換器>:& gt響應攔截器>:& gt最後的結果。

只能用於“PUT”、“POST”和“PATCH”方法,因為只有這些方法可以攜帶請求體。

將用於所有請求方法的返回數據。

在開發過程中,客戶端與服務器打交道時,往往會使用壹個令牌進行驗證,因為每個公司刷新令牌的邏輯都不壹樣。這裏我舉個簡單的例子。

為什麽我們需要有取消請求的功能?如果當我們的頁面發送請求時,用戶主動退出當前界面或者app應用退出時數據還沒有響應,那麽我們需要取消網絡請求,防止不必要的錯誤。

服務器生成的壹小段文本信息發送給瀏覽器,瀏覽器將cookie以kv的形式保存在本地的文本文件中,下次請求同壹個網站時會將cookie發送給服務器。

使用cookie需要兩個第三方組件,dio_cookie_manager和cookie_jar。

因為在我們平時的開發過程中,會遇到壹種情況。在進行網絡請求時,我們希望正常訪問最後的數據,這樣對用戶的體驗更好,而不是顯示壹個空白頁。這個緩存主要是為了顫振實戰的網口緩存參考。

我們的內存緩存會在程序退出後消失,所以我們使用shared_preferences來緩存磁盤上的數據。

當我們使用flutter抓取包時,需要配置Dior代理。onHttpClientCreate回調由DefaultHttpClient提供,用於設置底層HttpClient的代理。

用於驗證您正在訪問的網站是否真實。提供安全性,因為證書和附加域由根證書頒發機構簽名。

日誌打印主要是幫助我們開發時調試。