真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

flutter網(wǎng)站,flutter中文網(wǎng)

Flutter Dio源碼分析(四)--封裝

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

為隴川等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及隴川網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、做網(wǎng)站、隴川網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

Flutter Dio源碼分析(二)--HttpClient、Http、Dio對比

Flutter Dio源碼分析(三)--深度剖析

Flutter Dio源碼分析(四)--封裝

Flutter Dio源碼分析(一)--Dio介紹視頻教程

Flutter Dio源碼分析(二)--HttpClient、Http、Dio對比視頻教程

Flutter Dio源碼分析(三)--深度剖析視頻教程

Flutter Dio源碼分析(四)--封裝視頻教程

github倉庫地址

本文會手把手教你該怎么去封裝一個類庫,平時在我們的工作中都是拿著別人的造好的輪子在使用,這篇文章將帶你怎么去自己造輪子,以后再碰到別的類庫需要對其進(jìn)行封裝的時候提供一個的思路和方法。

在前面的文章中,我們對 Dio 的基本使用、請求庫對比、源碼分析,我們知道 Dio 的使用非常的簡單,那為什么還需要進(jìn)行封裝呢?有兩點如下:

當(dāng)組件庫方法發(fā)生重要改變需要遷移的時候如果有多處地方用到,那么需要對使用到的每個文件都進(jìn)行修改,非常的繁瑣而且很容易出問題。

當(dāng)不需要 Dio 庫的時候,我們可以隨時方便切換到別的網(wǎng)絡(luò)請求庫,當(dāng)然 Dio 目前內(nèi)置支持使用第三方庫的適配器。

因為一個應(yīng)用程序基本都是統(tǒng)一的配置方式,所以我們可以針對 攔截器 、 轉(zhuǎn)換器 、 緩存 、 統(tǒng)一處理錯誤 、 代理配置 、 證書校驗 等多個配置進(jìn)行統(tǒng)一管理。

因為我們的應(yīng)用程序在每個頁面中都會用到網(wǎng)絡(luò)請求,那么如果我們每次請求的時候都去實例化一個 Dio ,無非是增加了系統(tǒng)不必要的開銷,而使用單例模式對象一旦創(chuàng)建每次訪問都是同一個對象,不需要再次實例化該類的對象。

這是通過靜態(tài)變量的私有構(gòu)造器來創(chuàng)建的單例模式

我們對 超時時間 、 響應(yīng)時間 、 BaseUrl 進(jìn)行統(tǒng)一設(shè)置

因為不管是 get() 還是 post() 請求, Dio 內(nèi)部最終都會調(diào)用 request 方法,只是傳入的 method 不一樣,所以我們這里定義一個枚舉類型在一個方法中進(jìn)行處理

我們已經(jīng)把 Restful API 風(fēng)格簡化成了一個方法,通過 DioMethod 來標(biāo)明不同的請求方式。在我們平時開發(fā)的過程中,需要在請求前、響應(yīng)前、錯誤時對某一些接口做特殊的處理,那我們就需要用到攔截器。 Dio 為我們提供了自定義攔截器功能,很容易輕松的實現(xiàn)對請求、響應(yīng)、錯誤時進(jìn)行攔截

我們發(fā)現(xiàn)雖然 Dio 框架已經(jīng)封裝了一個 DioError 類庫,但如果需要對返回的錯誤進(jìn)行統(tǒng)一彈窗處理或者路由跳轉(zhuǎn)等就只能自定義了

在我們發(fā)送請求的時候會碰到幾種情況,比如需要對非open開頭的接口自動加上一些特定的參數(shù),獲取需要在請求頭增加統(tǒng)一的 token

在我們請求接口前可以對響應(yīng)數(shù)據(jù)進(jìn)行一些基礎(chǔ)的處理,比如對響應(yīng)的結(jié)果進(jìn)行自定義封裝,還可以針對單獨的 url 做特殊處理等。

我們看了轉(zhuǎn)換器的介紹,發(fā)現(xiàn)和攔截器的功能差不多,那為什么還要存在轉(zhuǎn)換器,有兩點:

執(zhí)行流程: 請求攔截器 請求轉(zhuǎn)換器 發(fā)起請求 響應(yīng)轉(zhuǎn)換器 響應(yīng)攔截器 最終結(jié)果 。

只會被用于 'PUT'、 'POST'、 'PATCH'方法,因為只有這些方法才可以攜帶請求體(request body)

會被用于所有請求方法的返回數(shù)據(jù)。

在開發(fā)過程中,客戶端和服務(wù)器打交道的時候,往往會用一個 token 來做校驗,因為每個公司處理刷新token的邏輯都不一樣,我這里舉一個簡單的例子

為什么我們需要有取消請求的功能,如果當(dāng)我們的頁面在發(fā)送請求時,用戶主動退出當(dāng)前界面或者app應(yīng)用程序退出的時候數(shù)據(jù)還沒有響應(yīng),那我們就需要取消該網(wǎng)絡(luò)請求,防止不必要的錯誤。

由 服務(wù)器生成 的 一小段文本信息 ,發(fā)送給瀏覽器,瀏覽器把 cookie 以kv形式保存到本地 某個目錄下的文本文件內(nèi),下一次請求同一網(wǎng)站時會把該 cookie 發(fā)送給服務(wù)器。

cookie 的使用需要用到兩個第三方組件 dio_cookie_manager 和 cookie_jar

因為在我們平時的開發(fā)過程中,會碰到一種情況,在進(jìn)行網(wǎng)絡(luò)請求時,我們希望能正常訪問到上次的數(shù)據(jù),對于用戶的體驗比較好,而不是展示一個空白的頁面,該緩存主要是 《Flutter實戰(zhàn)》網(wǎng)絡(luò)接口緩存 提供參考。

我們在程序退出后內(nèi)存緩存將會消失,所以我們用 shared_preferences 進(jìn)行磁盤緩存數(shù)據(jù)。

在我們用flutter進(jìn)行抓包的時候需要配置 Dio 代理。由 DefaultHttpClientAdapter 提供了一個 onHttpClientCreate 回調(diào)來設(shè)置底層 HttpClient 的代理。

用于驗證正在訪問的網(wǎng)站是否真實。提供安全性,因為證書和域名綁定,并且由根證書機(jī)構(gòu)簽名確認(rèn)。

日志打印主要是幫助我們開發(fā)時進(jìn)行輔助排錯

flutter dio 網(wǎng)絡(luò)請求問題

最近在做公司工業(yè)互聯(lián)網(wǎng)的一個項目 之前做了一個ipad 版本的 在使用dio網(wǎng)絡(luò)請求框架的時候發(fā)現(xiàn)請求登錄的時候后臺一直報簽名錯誤問題? 檢查了幾遍寫的簽名方法沒有發(fā)現(xiàn)錯誤 后面仔細(xì)查了下 是服務(wù)器不能識別我傳的數(shù)據(jù)。。。

如果content-type是form-data 我們需要通過FormData類來構(gòu)建數(shù)據(jù),否則服務(wù)器將無法識別

同時需要傳入一個Option指明content-type,而form-data的content-type完整類型表述為:multipart/form-data

主要我是個新手啊?

查看源碼?

headers里面并有multipart/form-data 這個類型啊? ? 講道理這個是常用的contentType啊 應(yīng)該要列出來才對啊?

咋整?

自己設(shè)置。。。。

后臺就可以正常接收表單參數(shù)了

Flutter基礎(chǔ)Dart 相關(guān)書籍和網(wǎng)站推薦

網(wǎng)站:

Flutter官網(wǎng)

國內(nèi)Flutter中文資源網(wǎng)

Flutter中文網(wǎng)

Dart官網(wǎng)

Dart中文網(wǎng)

第三方包官網(wǎng)

國內(nèi)第三方包官網(wǎng)

必讀書籍:

《Dart語言實戰(zhàn):基于Angular框架的Web開發(fā)》

《Flutter實戰(zhàn)》

記錄flutter-folio開源項目啟動報錯Method not found

下載了一個開源項目flutter-folio

編譯的時候一直在說方法找不到。

Error: Method not found:

是cloud_firebase_web跳轉(zhuǎn)找firebase_core的某個方法的時候說找不到。

按照網(wǎng)上說的在firebase包定義前面添加關(guān)鍵字dependency_overrides:也不行。

開始的時候嘗試著自己修改方法名讓它能夠找到,一直搞不定??偢杏X這個是系統(tǒng)自帶的類庫,不應(yīng)該發(fā)生這么低級的錯誤了。

最后仔細(xì)看了一下他們的版本不對應(yīng),有可能是版本問題,cloud_firebase_web是1.0.7,使用工具跳轉(zhuǎn)到firebase_core的時候是1.17.0

然后就嘗試著手動修改firebase_core關(guān)聯(lián)的包,不要讓它自動匹配版本,而是強(qiáng)制使用某一個固定版本。

比如之前是這么寫的:firebase_core: ^1.0.1,^含義是找到大于1.0.1小于2.0.0的最高版本

修改成:firebase_core: 1.4.0

具體有哪些版本可以去這個網(wǎng)站上找:

然后就可以了。

事后分析原因是:firebase_core雖然沒有修改大版本號,當(dāng)前依然是1.17.0。但是里面做了不兼容的改動,刪除了某些方法,導(dǎo)致了找不到。而cloud_firebase_web當(dāng)前的最高版本已經(jīng)是3點幾了,因此對應(yīng)firebase_core版本的cloud_firebase_web在2或者3才兼容。

所以包管理真的是一件比較麻煩的事情。

Flutter真香,我用它寫了個桌面版JSON解析工具

Flutter支持穩(wěn)定的桌面設(shè)備開發(fā)已經(jīng)一段時間了,不得不說,F(xiàn)lutter多平臺支持的特性真的很香。我本人并沒有任何桌面開發(fā)的經(jīng)驗,但仍然使用Flutter開發(fā)出了一個桌面版小程序,功能很簡單,就是對輸入的json做格式化處理和轉(zhuǎn)模型。

話不多說,先來看看實際效果。 項目源碼地址

開發(fā)環(huán)境如下:

Flutter : 2.8.1

Dart : 2.15.1

IDE : VSCode

JSON作為我們?nèi)粘i_發(fā)工作中經(jīng)常要打交道的一種數(shù)據(jù)格式,它共有6種數(shù)據(jù)類型: null , num , string , object , array , bool 。我們勢必對它又愛又恨。愛他因為他作為數(shù)據(jù)處理的一種格式確實非常方便簡潔。但是在我們做Flutter開發(fā)中,又需要接觸到j(luò)son解析時,就會感覺非常棘手,因為flutter沒有反射,導(dǎo)致json轉(zhuǎn)模型這塊需要手寫那繁雜的映射關(guān)系。就像下面這樣子。

數(shù)據(jù)量少還能接受,一旦量大,那么光手寫這個解析方法都能讓你懷疑人生。更何況手寫還有出錯的可能。好在官方有個工具**json_serializable**可以自動生成這塊轉(zhuǎn)換代碼,也解決了flutter界json轉(zhuǎn)模型的空缺。當(dāng)然,業(yè)界也有專門解析json的網(wǎng)站,可以自動生成dart代碼,使用者在生成后復(fù)制進(jìn)項目中即可,也是非常方便的。

本項目以json解析為切入點,和大家一起來看下flutter是如何開發(fā)桌面應(yīng)用的。

要讓我們的flutter項目支持桌面設(shè)備。我們首先需要修改下flutter的設(shè)置。如下,讓我們的項目支持 windows 和 macos 系統(tǒng)。

接下來使用 flutter create 命令創(chuàng)建我們的模版工程。

創(chuàng)建完項目后,我們就可以 run 起來了。

先來看下整體界面,界面四塊,分別為功能模塊、文件選擇模塊、輸入模塊、輸出模塊。

我們在新建一個桌面應(yīng)用時,默認(rèn)的模版又一個Appbar,此時應(yīng)用可以用鼠標(biāo)拖拽移動,放大縮小,還可以縮到很小。但是,我們一旦去掉這個導(dǎo)航欄,那么窗口就不能用鼠標(biāo)拖動了,并且我們往往不希望用戶將我們的窗口縮放的很小,這會導(dǎo)致頁面異常,一些重要信息都展示不全。因此這里需要借助第三方組件 bitsdojo_window 。通過 bitsdojo_window ,我們可以實現(xiàn)窗口的定制化,拖動,最小尺寸,最大尺寸,窗口邊框,窗口頂部放大、縮小、關(guān)閉的按鈕等。

通過 InkWell 組件,可以捕捉到手勢、鼠標(biāo)、觸控筆的移動和停留位置

這個功能是鼠標(biāo)移動后的UI交互界面。要在窗口上顯示一個提示框,可以使用 Overlay 。需要注意的是,由于在 Overlay 上的 text 的根結(jié)點不是 Material 風(fēng)格的組件,因此會出現(xiàn)黃色的下劃線。因此一定要用 Material 包一下 text 。并且你必須給創(chuàng)建的 OverlayEntry 一個位置,否則它將全屏顯示。

讀取說表拖拽的文件一開始想嘗試使用 InkWell 組件,但是這個組件無法識別拖拽中的鼠標(biāo),并且也無法從中拿到文件信息。因此放棄。后來從文章《Flutter-2天寫個桌面端APP》中發(fā)現(xiàn)一個可讀取拖拽文件的組件 desktop_drop ,能滿足要求。

使用開源組件 file_picker ,選完圖片后的操作和拖拽選擇圖片后的操作一致。

Textfield 如果要顯示富文本,那么需要自定義 TextEditingController 。并重寫 buildTextSpan 方法。

在做導(dǎo)出功能時遇到下列報錯,保存提示為沒有權(quán)限訪問對應(yīng)目錄下的文件。

通過Apple的開發(fā)文檔找到有關(guān)權(quán)限問題的說明。其中有個授權(quán)私鑰的key為 com.apple.security.files.downloads.read-write ,表示 對用戶的下載文件夾的讀/寫訪問權(quán)限 。那么,使用Xcode打開Flutter項目中的mac應(yīng)用,修改工程目錄下的 DebugProfile.entitlements 文件,向 entitlements 文件中添加 com.apple.security.files.downloads.read-write ,并將值設(shè)置為YES,保存后重啟Flutter項目。發(fā)現(xiàn)已經(jīng)可以向下載目錄中讀寫文件了。

當(dāng)然,這是正常操作。還有個騷操作就是關(guān)閉系統(tǒng)的沙盒機(jī)制。將 entitlements 文件的 App Sandbox 設(shè)置為NO。這樣我們就可以訪問任意路徑了。當(dāng)然關(guān)閉應(yīng)用的沙盒也就相當(dāng)于關(guān)閉了應(yīng)用的防護(hù)機(jī)制,因此這個選項慎用。

原文地址:

開源精粹(二)!22個實用、有趣的開源項目

作為一名開源愛好者,發(fā)掘優(yōu)秀的開源項目是一件非常有趣的事情。在第一期中,我分享了單頁個人網(wǎng)站模板、組裝式 Flutter 應(yīng)用框架、PHP 客戶端庫、Java 診斷工具等一些實用的庫和工具。本期依舊會為大家分享一些前端、后端、移動開發(fā)的相關(guān)工具,希望你能“淘”到適合自己的工具。

1.Vue-EasyTable

Vue-EasyTable 是一款基于 Vue2.x 的 table 組件,具備自適應(yīng)、表頭與列固定、自定義單元格樣式、自定義 Loading 等功能。

2.React-Calendar

這是一款具備原生日期格式的日歷組件。它不依賴 Moment.js,支持日期選擇范圍,涵蓋了各國語言,開箱即用。

3.Matter

CSS 實現(xiàn)的 Material 組件合集項目,作者已將部分作品開源,效果可以在 CodePen 上查看。

4.Revery

Revery 是一款用于構(gòu)建高性能、跨平臺桌面應(yīng)用的框架。它類似于加速版的原生 Electron,除了擁有類似 React / Redux 的庫,還具備 GPU 加速渲染功能,其內(nèi)置的編譯器速度也相當(dāng)快。

5.Web Accessibility Guide

這是一個精選了 Web 可訪問性貼士、技巧和最佳實踐的開源項目,你將會學(xué)習(xí)到一些改善 Web 可訪問性的實用做法。

1.SOFAJRaft

SOFAJRaft 是螞蟻金服開源的生產(chǎn)級 Java Raft 算法庫,它基于 Raft 一致性算法的生產(chǎn)級高性能 Java 實現(xiàn),支持 MULTI-RAFT-GROUP,適用于高負(fù)載低延遲的場景,易于使用。

2. Dragonwell

阿里開源了 OpenJDK 發(fā)行版 Dragonwell,它提供長期支持,包括性能增強(qiáng)和安全修復(fù)。在數(shù)據(jù)中心大規(guī)模 Java 應(yīng)用部署情況下,可以大幅度提高穩(wěn)定性、效率以及性能。

3.Lawoole

Lawoole 是一款基于 Laravel 和 Swoole 的高性能 PHP 框架。它兼具了 Laravel 的特點,還解決了其功能背后的性能問題。同時,你還能感受到與 Laravel 一樣的編碼體驗。

4.AntNest

AntNest 是一個簡潔、快速的異步爬蟲框架。它僅有 600 行代碼,基于 Python 3.6+.

5.PHP-Awesome

這個倉庫匯集了 PHP 優(yōu)秀的資源,供你查詢和參考。

1.FlutterBoost

FlutterBoost 是閑魚開源的新一代 Flutter-Native 混合解決方案。它能夠幫你處理頁面的映射和跳轉(zhuǎn),你只需要關(guān)心頁面的名字和參數(shù)即可。

2.MyLayout

MyLayout 是一套 iOS 界面視圖布局框架,可謂 iOS 下的界面布局利器。它集成了 iOS Autolayout、Size Classes、Android 的 5 大布局體系、HTML/CSS 的浮動定位技術(shù)以及 Flex-Box 和 Bootstrap 框架等主流的平臺的界面布局功能,并提供了一套簡單、完備的多屏幕尺寸適配的解決方案。

3.SegementSlide

SegementSlide 是一個 iOS UI 庫,它具備完整的滑滾及切換組件,旨在解決多層 UIScrollView 嵌套滾動的問題。

1.DevHub

DevHub 是一款跨平臺的 GitHub 通知管理客戶端,支持 Android、 iOS、網(wǎng)頁和桌面上使用,幫助你便捷的接收 GitHub 各類通知。

2.Reqman

Reqman 是一個幫助后端工程師進(jìn)行 API 測試的工具,同時也是一個基于 Node.js 的爬蟲工具。

3.FreeCodeCamp

說到 FreeCodeCamp,或許大家不會陌生,而這個項目就是他們建立的開源課程和相應(yīng)的代碼庫。網(wǎng)站提供了 6 大認(rèn)證課程,也涉及了全棧開發(fā)認(rèn)證。如果你感興趣,不妨了解下。

4.Gitter

Gitter 是 GitHub 小程序客戶端,作者采用 Taro 框架 + Taro UI 進(jìn)行開發(fā),而小程序內(nèi)數(shù)據(jù)則來自 GitHub Api V3.

5.Awesome Podcasts

這個項目收集了各類實用的播客,涵蓋了主流的編程語言,希望對你提升技術(shù)水平有所幫助。

6.編程圖書大全

書籍不光能在你迷茫的時候,給予你答案,還能在你提升技能的時候,給予你幫助。這個倉庫收集了眾多編程圖書,涉及主流編程語言、人工智能、算法、Linux、大數(shù)據(jù)等??纯?,有木有你需要的。

7.VS Code Netease Music

很多開發(fā)者喜歡邊寫代碼,邊聽音樂,VS Code Netease Music 這個插件就能滿足你在 VS Code 上聽歌的愿望。它使用 Webview 實現(xiàn),不依賴命令行播放器。

Star-Battle

Star-Battle 是一款使用 JavaScript ES6、Canvas 開發(fā)的飛船射擊類 游戲 。來 Enjoy 吧。

注:

如需轉(zhuǎn)載,煩請按下方注明出處信息,謝謝!


新聞名稱:flutter網(wǎng)站,flutter中文網(wǎng)
文章轉(zhuǎn)載:http://weahome.cn/article/dscihje.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部