flutter_xupdate 一鍵實現(xiàn)Flutter應(yīng)用版本更新

前言

自2018年我開源了XUpdate之后,至今已迭代了14個版本,月下載量達(dá)4k+,Github的star量也已經(jīng)有700+.

最近在研究Flutter,于是就隨手寫了一個Flutter小項目練練手,在寫的時候我就發(fā)現(xiàn),目前并沒有非常好用的版本更新Flutter插件,嘗試了使用Bugly的版本更新Flutter插件,但是效果非常不好.然后百度了一下,基本上都是如下方案:

  • 1.使用package_info插件獲取當(dāng)前應(yīng)用的版本信息
  • 2.使用dio插件進(jìn)行網(wǎng)絡(luò)請求獲取最新版本信息
  • 3.使用flutter_downloader插件下載最新APP并安裝

我想了一下,這實在是太麻煩了,要知道我的XUpdate把這些都已經(jīng)做好了,只需要一行代碼就可以實現(xiàn)應(yīng)用內(nèi)的版本更新,不僅如此我們完全沒必要把這個幾乎通用的功能在自己的應(yīng)用內(nèi)再實現(xiàn)一遍.

為此我仔細(xì)研究了一下Flutter的插件開發(fā),用了不到1天的時間,就把XUpdate的絕大多數(shù)功能在Flutter插件上實現(xiàn)了,這下我就可以舒舒服服地使用一行代碼來實現(xiàn)版本更新了!

下面我給出flutter_xupdate插件的地址:

https://pub.dev/packages/flutter_xupdate


演示

在這里插入圖片描述
  • 默認(rèn)版本更新


    在這里插入圖片描述
  • 支持后臺更新


    在這里插入圖片描述
  • 屏幕寬高比限制顯示更新


    在這里插入圖片描述
  • 強制更新


    在這里插入圖片描述

快速集成指南

添加引用依賴

在你的flutter項目中的pubspec.yaml文件中添加flutter_xupdate依賴.

  • 方法一: pub集成
dependencies:
  flutter_xupdate: ^0.0.2
  • 方法二: github集成
dependencies:
  flutter_xupdate:
    git:
      url: git://github.com/xuexiangjys/flutter_xupdate.git
      ref: master

Android設(shè)置

修改Android項目的主題為AppCompat主題摘能,文件路徑: android/app/src/main/res/values/styles.xml, 例如:

<resources>
    <style name="LaunchTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
</resources>

初始化

  • 調(diào)用FlutterXUpdate.init方法進(jìn)行初始化.
  • 調(diào)用FlutterXUpdate.setErrorHandler方法設(shè)置錯誤監(jiān)聽.
import 'package:flutter_xupdate/flutter_xupdate.dart';

   ///初始化
   void initXUpdate() {
     if (Platform.isAndroid) {
       FlutterXUpdate.init(
         ///是否輸出日志
         debug: true,
         ///是否使用post請求
         isPost: false,
         ///post請求是否是上傳json
         isPostJson: false,
         ///是否開啟自動模式
         isWifiOnly: false,
         ///是否開啟自動模式
         isAutoMode: false,
         ///需要設(shè)置的公共參數(shù)
         supportSilentInstall: false,
         ///在下載過程中脏里,如果點擊了取消的話烈菌,是否彈出切換下載方式的重試提示彈窗
         enableRetry: false
       ).then((value) {
         updateMessage("初始化成功: $value");
       }).catchError((error) {
         print(error);
       });

       FlutterXUpdate.setErrorHandler(
           onUpdateError: (Map<String, dynamic> message) async {
         print(message);
         setState(() {
           _message = "$message";
         });
       });
     } else {
       updateMessage("ios暫不支持XUpdate更新");
     }
   }

使用說明

版本更新返回的Json格式

{
  "Code": 0, //0代表請求成功,非0代表失敗
  "Msg": "", //請求出錯的信息
  "UpdateStatus": 1, //0代表不更新,1代表有版本更新,不需要強制升級抛腕,2代表有版本更新,需要強制升級
  "VersionCode": 3, //編譯版本號(唯一)
  "VersionName": "1.0.2", //版本名(用于展示)
  "ModifyContent": "1媒殉、優(yōu)化api接口担敌。\r\n2、添加使用demo演示廷蓉。\r\n3全封、新增自定義更新服務(wù)API接口。\r\n4桃犬、優(yōu)化更新提示界面刹悴。", //更新內(nèi)容
  "DownloadUrl": "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk",// 文件下載地址
  "ApkSize": 2048, //文件的大小(單位:kb)
  "ApkMd5": "..."  //md5值沒有的話,就無法保證apk是否完整攒暇,每次都會重新下載土匀。框架默認(rèn)使用的是md5加密形用。
}

版本更新

  • 默認(rèn)更新
FlutterXUpdate.checkUpdate(url: _updateUrl);
  • 默認(rèn)App更新 + 支持后臺更新
FlutterXUpdate.checkUpdate(url: _updateUrl, supportBackgroundUpdate: true);
  • 調(diào)整寬高比顯示的版本更新
FlutterXUpdate.checkUpdate(url: _updateUrl, widthRatio: 0.6);
  • 自動模式下版本更新, 如果需要完全無人干預(yù)就轧,自動更新证杭,需要root權(quán)限【靜默安裝需要】
FlutterXUpdate.checkUpdate(url: _updateUrl, isAutoMode: true);
  • 下載時點擊取消允許切換下載方式
FlutterXUpdate.checkUpdate(
      url: _updateUrl,
      overrideGlobalRetryStrategy: true,
      enableRetry: true,
      retryContent: "Github下載速度太慢了,是否考慮切換蒲公英下載妒御?",
      retryUrl: "https://www.pgyer.com/flutter_learn");

自定義Json解析

1.定義一個自定義的版本更新解析器

FlutterXUpdate.setCustomParseHandler(onUpdateParse: (String json) async {
    //這里是自定義json解析
    return customParseJson(json);
});

///將自定義的json內(nèi)容解析為UpdateEntity實體類
UpdateEntity customParseJson(String json) {
  AppInfo appInfo = AppInfo.fromJson(json);
  return UpdateEntity(
      hasUpdate: appInfo.hasUpdate,
      isIgnorable: appInfo.isIgnorable,
      versionCode: appInfo.versionCode,
      versionName: appInfo.versionName,
      updateContent: appInfo.updateLog,
      downloadUrl: appInfo.apkUrl,
      apkSize: appInfo.apkSize);
}

2.調(diào)用checkUpdate方法,并設(shè)置isCustomParse參數(shù)為true.

FlutterXUpdate.checkUpdate(url: _updateUrl3, isCustomParse: true);

直接傳入UpdateEntity進(jìn)行更新

///直接傳入UpdateEntity進(jìn)行更新提示
void checkUpdate8() {
    FlutterXUpdate.updateByInfo(updateEntity: customParseJson(_customJson));
}

關(guān)聯(lián)鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乎莉,隨后出現(xiàn)的幾起案子送讲,更是在濱河造成了極大的恐慌,老刑警劉巖惋啃,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哼鬓,死亡現(xiàn)場離奇詭異,居然都是意外死亡边灭,警方通過查閱死者的電腦和手機(jī)魄宏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來存筏,“玉大人,你說我怎么就攤上這事味榛⊥旨幔” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵搏色,是天一觀的道長善茎。 經(jīng)常有香客問我,道長频轿,這世上最難降的妖魔是什么垂涯? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮航邢,結(jié)果婚禮上耕赘,老公的妹妹穿的比我還像新娘。我一直安慰自己膳殷,他們只是感情好操骡,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赚窃,像睡著了一般册招。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勒极,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天是掰,我揣著相機(jī)與錄音,去河邊找鬼辱匿。 笑死键痛,一個胖子當(dāng)著我的面吹牛炫彩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播散休,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼媒楼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了戚丸?” 一聲冷哼從身側(cè)響起划址,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎限府,沒想到半個月后夺颤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡胁勺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年世澜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片署穗。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡寥裂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出案疲,到底是詐尸還是另有隱情封恰,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布褐啡,位于F島的核電站诺舔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏备畦。R本人自食惡果不足惜低飒,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懂盐。 院中可真熱鬧褥赊,春花似錦、人聲如沸莉恼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽类垫。三九已至司光,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悉患,已是汗流浹背残家。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留售躁,地道東北人坞淮。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓茴晋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親回窘。 傳聞我的和親對象是個殘疾皇子诺擅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容