1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      flutter獲取簽名,flutter手寫簽名

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

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

      創(chuàng)新互聯(lián)專業(yè)提供成都主機(jī)托管四川主機(jī)托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價(jià)格,機(jī)房位于中國(guó)電信/網(wǎng)通/移動(dòng)機(jī)房,成都服務(wù)器托管服務(wù)有保障!

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

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

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

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

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

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

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

      github倉(cāng)庫(kù)地址

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      只會(huì)被用于 'PUT'、 'POST'、 'PATCH'方法,因?yàn)橹挥羞@些方法才可以攜帶請(qǐng)求體(request body)

      會(huì)被用于所有請(qǐng)求方法的返回?cái)?shù)據(jù)。

      在開發(fā)過程中,客戶端和服務(wù)器打交道的時(shí)候,往往會(huì)用一個(gè) token 來做校驗(yàn),因?yàn)槊總€(gè)公司處理刷新token的邏輯都不一樣,我這里舉一個(gè)簡(jiǎn)單的例子

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

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

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

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

      我們?cè)诔绦蛲顺龊髢?nèi)存緩存將會(huì)消失,所以我們用 shared_preferences 進(jìn)行磁盤緩存數(shù)據(jù)。

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

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

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

      新建一個(gè)flutter項(xiàng)目,可以在ios上運(yùn)行,四步搞定!

      1. 建立一個(gè)flutter項(xiàng)目的命令

      2. 在ios文件夾下,生成pods文件夾

      3. Xcode環(huán)境簽名設(shè)置;

      把錯(cuò)誤的版本刪除再添加,可解決簽名錯(cuò)誤問題;必須先刪除再添加,直接修改可能不起作用。團(tuán)隊(duì)開發(fā),必須使用團(tuán)隊(duì)的簽名。

      4.運(yùn)行創(chuàng)建的flutter項(xiàng)目;

      選擇真機(jī)、模擬機(jī),點(diǎn)擊運(yùn)行按鈕,或使用命令運(yùn)行:

      下面兩步是贈(zèng)送的:

      5.新加一款插件,所涉及的命令;

      ios 端所涉及的命令

      6. 剛更新的插件和已有的插件有沖突怎么辦?

      可以試一試以下步驟:

      flutter 簽名和獲取應(yīng)用簽名

      簽名:

      keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

      【~/key.jks】生成文件的路徑和文件名

      keytool -importkeystore -srckeystore C:/test/key.jks -destkeystore C:/test/key.jks -deststoretype pkcs12

      遷移到行業(yè)標(biāo)準(zhǔn)格式 PKCS12

      在project/android下創(chuàng)建key.properties文件

      文件內(nèi)容

      在Projects\android\app\build.gradle里的 android{ 上邊添加

      def keystorePropertiesFile = rootProject.file("key.properties")

      def keystoreProperties =new Properties()

      keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

      android{

      buildTypes{

      release{

      ? ? signingConfig signingConfigs.release

      }

      }

      修改成

      signingConfigs{

      release{

      ? ? keyAlias keystoreProperties['keyAlias']

      ? ? keyPassword keystoreProperties['keyPassword']

      ? ? storeFile file(keystoreProperties['storeFile'])

      ? ? storePassword keystoreProperties['storePassword']

      }

      }

      buildTypes{

      release{

      ? ? signingConfig signingConfigs.release

      }

      }

      之后在執(zhí)行 flutter build apk打包就簽名了。

      在有簽名文件的情況下獲取應(yīng)用簽名:

      keytool -list -v -keystore 簽名文件路徑

      MD5就是文件簽名:復(fù)制出來去掉:就可以使用了。

      Flutter 集成ShareSDK分享功能

      項(xiàng)目分享中需要用到這兩項(xiàng),需要到官網(wǎng)進(jìn)行注冊(cè)。

      下面是官網(wǎng)的官方文檔:

      ;id=14

      根據(jù)官網(wǎng)指示,在pubspec.yaml文件中加入下面依賴

      dependencies:

      sharesdk_plugin:

      安卓的mobsdk.gradle客服說是可以自動(dòng)生成,也有存在部分未自動(dòng)生成,所以未自動(dòng)生成需要手動(dòng)添加,然后再重新自定義編輯。具體可以直接挪官網(wǎng)demo的文件。

      另外手動(dòng)添mobsdk.gradle文件后,需要在gradle文件中添加mobsdk.gradle的引用

      apply from:'../MobSDK.gradle'(在android{}之外添加)

      此外,ios的 sharesdk_plugin.podspec會(huì)自動(dòng)生成,就照著官網(wǎng)編輯即可,到了這步就算是sdk的成功引用了, 。

      1.需要打包簽名,不然微信等部分應(yīng)用分享失敗。

      2.flutter簽名沒有快捷方式了,需要用命令來生成,具體百度吧!

      3.打包,在命令行flutter? build apk,會(huì)在項(xiàng)目下/build/app/outputs/apk/release/下。

      通過cd到項(xiàng)目,運(yùn)行adb install apk的路徑的方式,進(jìn)行測(cè)試。

      Flutter 的Android 、iOS 打包

      Flutter 項(xiàng)目雖說是跨平臺(tái)項(xiàng)目,但是項(xiàng)目的名稱還是需要在不同的平臺(tái)設(shè)置,不同平臺(tái)的設(shè)置位置是:

      1、 Android 項(xiàng)目名字配置是在 android/app/src/main/AndroidManifest.xml 文件中的 application 下的 android:label 。如下圖所示:

      2、 iOS 項(xiàng)目名字配置是在 ios/Runner/Info.plist 文件中的 dict 下的 keyCFBundleName/key stringtestapp/string 。如下圖所示:

      Flutter 項(xiàng)目雖說是跨平臺(tái)項(xiàng)目,但是項(xiàng)目的 Logo 圖標(biāo)還是需要在不同的平臺(tái)設(shè)置,不同平臺(tái)的設(shè)置位置是:

      1、 Android 項(xiàng)目 Logo 配置是在圖片放置在 android/app/src/main/res 下的對(duì)應(yīng)目錄下:

      mipmap-mdpi : 48 _ 48

      mipmap-hdpi : 72 _ 72

      mipmap-xhdpi :96 _ 96

      mipmap-xxhdpi :144 _ 144

      mipmap-xxxhdpi :192 * 192。如下圖所示:

      然后,在 android/app/src/main/AndroidManifest.xml 路徑下的 AndroidManifest.xml 文件中的 android:icon 。如下圖所示:

      2、 iOS 項(xiàng)目 Logo 的配置是在 ios/Runner/Assets.xcassets/AppIcon.appiconset 文件下,直接更換圖片,名字不要改動(dòng) 。如下圖所示:

      1、使用 cd 指令進(jìn)入項(xiàng)目(testapp)的根目錄(方便后面操作),如下圖所示:

      填寫對(duì)應(yīng)的值,如下圖所示:

      1、 build.gradle 文件的位置,如下圖所示:

      2、在 build.gradle 中配置 key.propreties 的全局變量,

      如下圖所示:

      3、 build.gradle 文件中進(jìn)行簽名配置。

      如下圖所示:

      注意: buildTypes 中的 signingConfig signingConfigs.debug 可以變更為 signingConfig signingConfigs.release ,這樣在打包的時(shí)候,直接可以 flutter build apk ,否則就執(zhí)行 flutter build apk --release 。如圖所示:

      1、 cd 進(jìn)入功能(testapp) 的根目錄,如下圖所示:

      2、執(zhí)行 flutter build apk 指令,如下圖所示:

      我們打包成功, 生成的 apk 包在 build/app/outputs/apk/release/app-release.apk 目錄下,如下圖所示:

      1、將真機(jī)通過 USB 鏈接到電腦上,如下圖所示:

      2、然后,在項(xiàng)目的根目錄執(zhí)行 flutter install , 如果出現(xiàn)電腦同時(shí)有多個(gè)設(shè)備時(shí),就執(zhí)行 flutter install -d deviceid 。如下圖所示:

      3、設(shè)備的安裝過程如下:

      1、必須一個(gè) Xcode 開發(fā)工具

      2、如果是 Window 的電腦,請(qǐng)安裝 Mac 虛擬系統(tǒng),進(jìn)行安裝 Xcode .

      1、打開目錄下的 Runner.xcworkspace 工程。

      如下圖所示:

      2、在 ios 工程中配置 Signing Capabilities , 如下圖所示:

      1、進(jìn)入項(xiàng)目的根目錄

      2、打包指令 flutter build ios --release

      如圖所示:

      3、使用 Xcode 工具進(jìn)行打包

      如圖所示:

      注意:進(jìn)行該步驟,必須執(zhí)行 flutter build ios --release 否則會(huì)報(bào)錯(cuò)。

      打包成功,如下圖所示:

      Flutter真機(jī)調(diào)試之后,安裝新版本時(shí)提示:更新包與已安裝應(yīng)用簽名不一致

      需要在命令行操作

      但是我查出來的并沒有我的包名

      6.成功了,現(xiàn)在在安裝APP,就ok了


      名稱欄目:flutter獲取簽名,flutter手寫簽名
      網(wǎng)頁(yè)地址:http://ef60e0e.cn/article/phsioj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        海林市| 马山县| 孟津县| 东乡县| 南溪县| 遵化市| 临安市| 铁岭市| 吉木萨尔县| 凤翔县| 汝阳县| 抚顺县| 凤台县| 吉首市| 麻栗坡县| 青海省| 玉溪市| 岗巴县| 安丘市| 潍坊市| 湄潭县| 家居| 晋江市| 建阳市| 阿巴嘎旗| 湛江市| 乌苏市| 额济纳旗| 特克斯县| 保定市| 南宫市| 沈阳市| 滁州市| 西宁市| 桐柏县| 介休市| 阿图什市| 淮滨县| 广丰县| 尼玛县| 武强县|