

flutter_xupdate 一键实现Flutter应用版本更新_移动开发_xuexiangjys的博客-CSDN博客
source link: https://xuexiangjys.blog.csdn.net/article/details/104255836?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

flutter_xupdate 一键实现Flutter应用版本更新
自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
插件的地址:
https://pub.dev/packages/flutter_xupdate

-
默认版本更新
-
支持后台更新
-
屏幕宽高比限制显示更新
-
强制更新
-
自定义更新提示弹窗样式
快速集成指南
添加引用依赖
在你的flutter项目中的pubspec.yaml
文件中添加flutter_xupdate
依赖.
- 方法一: pub集成
dependencies:
flutter_xupdate: ^0.0.3
- 方法二: 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");
自定义Json解析
1.定义一个自定义的版本更新解析器
FlutterXUpdate.setCustomParseHandler(onUpdateParse: (String json) async {
//这里是自定义json解析
return customParseJson(json);
});
///将自定义的json内容解析为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.调用checkUpdate
方法,并设置isCustomParse
参数为true.
FlutterXUpdate.checkUpdate(url: _updateUrl3, isCustomParse: true);
直接传入UpdateEntity进行更新
///直接传入UpdateEntity进行更新提示
void checkUpdate8() {
FlutterXUpdate.updateByInfo(updateEntity: customParseJson(_customJson));
}
自定义版本更新提示弹窗样式
目前只支持主题色和顶部图片的自定义
1.配置顶部图片的资源路径, 路径: android/app/src/main/res/values/drawable, 千万不要放到mipmap文件下,否则资源将找不到。例如:
2.调用checkUpdate
方法,并设置themeColor
和 topImageRes
参数。
///自定义更新弹窗样式
void customPromptDialog() {
FlutterXUpdate.checkUpdate(url: _updateUrl, themeColor: '#FFFFAC5D', topImageRes: 'bg_update_top');
}
Name | Type | Default | Description |
---|---|---|---|
debug | bool | false | 是否输出日志 |
isPost | bool | false | 是否使用post请求 |
isPostJson | bool | false | post请求是否是上传json |
isWifiOnly | bool | true | 是否只在wifi下才能进行更新 |
isAutoMode | bool | false | 是否开启自动模式 |
supportSilentInstall | bool | false | 是否支持静默安装,这个需要设备有root权限 |
enableRetry | bool | false | 在下载过程中,如果点击了取消的话,是否弹出切换下载方式的重试提示弹窗 |
retryContent | String | ‘’ | 重试提示弹窗的提示内容 |
retryUrl | String | ‘’ | 重试提示弹窗点击后跳转的url |
params | Map | / | 需要设置的公共参数 |
Name | Type | Default | Description |
---|---|---|---|
url | String | / | 版本检查的地址 |
params | Map | / | 传递的参数 |
supportBackgroundUpdate | bool | false | 是否支持后台更新 |
isAutoMode | bool | false | 是否开启自动模式 |
isCustomParse | bool | false | 是否是自定义解析协议 |
themeColor | String | ‘’ | 应用弹窗的主题色 |
topImageRes | String | ‘’ | 应用弹窗的顶部图片资源名 |
buttonTextColor | String | ‘’ | 按钮文字的颜色 |
widthRatio | double | / | 版本更新提示器宽度占屏幕的比例, 不设置的话不做约束 |
heightRatio | double | / | 版本更新提示器高度占屏幕的比例, 不设置的话不做约束 |
overrideGlobalRetryStrategy | bool | false | 是否覆盖全局的重试策略 |
enableRetry | bool | false | 在下载过程中,如果点击了取消的话,是否弹出切换下载方式的重试提示弹窗 |
retryContent | String | ‘’ | 重试提示弹窗的提示内容 |
retryUrl | String | ‘’ | 重试提示弹窗点击后跳转的url |
微信公众号
更多资讯内容,欢迎微信搜索公众号:「我的Android开源之旅」

Recommend
-
210
README.md XAOP 一个轻量级的AOP(Android)应用框架。囊括了最实用的AOP应用。
-
73
README.md XVideo
-
180
-
61
XUpdate 一个轻量级、高可用性的Android版本更新框架 关于我 特点 支持post和get两种版本检查方式,支持自定义网络请求。 支持设置只在wifi下进行版本更新。 支持静默下载、自动版本更新。 提供界面友好的版本更新
-
90
-
51
README.md XHttp2
-
48
README.md
-
63
-
22
flutter_xupdate 一键实现Flutter应用版本更新 自2018年我开源了XUpdate之后,至今已迭代了14个版本,月下载量达4k+,Github的star量也已经有700+. ...
-
51
前言 自2018年我开源了XUpdate之后,至今已迭代了14个版本,月下载量达7k+,Github的star量也已经有1.1k+. 最近在研究Flutter,于是就随手写了一个Flutter小项目练练手,在写的时候我就发现,目前并没有非常...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK