前言
自 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.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");
关联链接
- XUpdate 一个轻量级、高可用性的 Android 版本更新框架
- XUpdate 使用说明文档
- XUpdate 的 Flutter 插件
- XUpdate 后台管理服务
- XUpdate 后台管理系统
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于