flutter_xupdate 一鍵實現Flutter應用版本更新

xuexiangjys發表於2020-02-10

前言

自2018年我開源了XUpdate之後,至今已迭代了14個版本,月下載量達4k+,Github的star量也已經有700+.

最近在研究Flutter,於是就隨手寫了一個Flutter小專案練練手,在寫的時候我就發現,目前並沒有非常好用的版本更新Flutter外掛,嘗試了使用Bugly的版本更新Flutter外掛,但是效果非常不好.然後百度了一下,基本上都是如下方案:

  • 1.使用package_info外掛獲取當前應用的版本資訊
  • 2.使用dio外掛進行網路請求獲取最新版本資訊
  • 3.使用flutter_downloader外掛下載最新APP並安裝

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

為此我仔細研究了一下Flutter的外掛開發,用了不到1天的時間,就把XUpdate的絕大多數功能在Flutter外掛上實現了,這下我就可以舒舒服服地使用一行程式碼來實現版本更新了!

下面我給出flutter_xupdate外掛的地址:

pub.dev/packages/fl…


演示

在這裡插入圖片描述

  • 預設版本更新
    在這裡插入圖片描述
  • 支援後臺更新
    在這裡插入圖片描述
  • 螢幕寬高比限制顯示更新
    在這裡插入圖片描述
  • 強制更新
    在這裡插入圖片描述

快速整合指南

新增引用依賴

在你的flutter專案中的pubspec.yaml檔案中新增flutter_xupdate依賴.

  • 方法一: pub整合
dependencies:
  flutter_xupdate: ^0.0.1
複製程式碼
  • 方法二: github整合
dependencies:
  flutter_xupdate:
    git:
      url: git://github.com/xuexiangjys/flutter_xupdate.git
      ref: master
複製程式碼

Android設定

修改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>
複製程式碼

初始化

  • 呼叫FlutterXUpdate.init方法進行初始化.
  • 呼叫FlutterXUpdate.setErrorHandler方法設定錯誤監聽.
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,
         ///需要設定的公共引數
         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、優化api介面。\r\n2、新增使用demo演示。\r\n3、新增自定義更新服務API介面。\r\n4、優化更新提示介面。", //更新內容
  "DownloadUrl": "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk",// 檔案下載地址
  "ApkSize": 2048, //檔案的大小(單位:kb)
  "ApkMd5": "..."  //md5值沒有的話,就無法保證apk是否完整,每次都會重新下載。框架預設使用的是md5加密。
}
複製程式碼

版本更新

  • 預設更新
FlutterXUpdate.checkUpdate(url: _updateUrl);
複製程式碼
  • 預設App更新 + 支援後臺更新
FlutterXUpdate.checkUpdate(url: _updateUrl, supportBackgroundUpdate: true);
複製程式碼
  • 調整寬高比顯示的版本更新
FlutterXUpdate.checkUpdate(url: _updateUrl, widthRatio: 0.6);
複製程式碼
  • 自動模式下版本更新, 如果需要完全無人干預,自動更新,需要root許可權【靜默安裝需要】
FlutterXUpdate.checkUpdate(url: _updateUrl, isAutoMode: true);
複製程式碼
  • 下載時點選取消允許切換下載方式
FlutterXUpdate.checkUpdate(
      url: _updateUrl,
      overrideGlobalRetryStrategy: true,
      enableRetry: true,
      retryContent: "Github下載速度太慢了,是否考慮切換蒲公英下載?",
      retryUrl: "https://www.pgyer.com/flutter_learn");
複製程式碼

關聯連結

微信公眾號

在這裡插入圖片描述

交流群

在這裡插入圖片描述

相關文章