实现功能
- 自动检查本地APP版本是否最新
- 自动提醒用户升级
- 引导用户去 AppStore 或 Google Play 市场完成升级操作
- 当用户放弃本次升级后,在1天内不再提醒
实现逻辑
![业务逻辑](https://raw.githubusercontent.com/tongweizj/MaxFlutterTutorial/master/doc/img/max-flutter-tutorial-1.png “Image title” %}
业务功能截图
目录结构
.
├── lib
│ ├── main.dart
│ ├── setting.dart
│ ├── core
│ │ ├── service
│ │ └── viewmodels
│ └── ui
│ ├── home_view.dart
│ ├── updater_view.dart
│ └── widgets
└── pubspec.yaml
核心代码片段说明
update_view.dart
在启动页或某个必须经过的页面上加入update_view, 用异步的方式调用升级检查功能,如果可以升级,就在当前页面插入ShowDialog
/// update_view.dart
_isUpdate() async {
var isUpdate = await UpdateModel.isUpdate();
if (isUpdate["isUpdate"] == 1) {
buildUpdateShowDialog(context, isUpdate["appStoreUrl"]);
}
}
update_model.dart
class UpdateModel {
/// 检查是否需要升级
static Future isUpdate() async {
// changeState(ViewState.Busy);
//每次打开APP获取当前时间戳
var timeEnd = DateTime.now().millisecondsSinceEpoch;
//获取"Later"保存的时间戳
var timeStart = UpdateApi.getUpgradeRemindLaterTime();
if (timeStart == 0 && timeEnd - timeStart >= getUpdateFrequency) {
// 之前没有点击过,这事第一次打开APP时执行"版本更新"的网络请求
// 或者 间隔时间 >= 一周,执行网络请求
Map appVersionData = await UpdateApi.getAppVersion();
var respAppVer = Map.from({
"isUpdate": 1,
"appStoreUrl": "",
});
var _serviceVersionCode;
if (appVersionData != null) {
/// 判断当前用户手机系统是ios 还是 android
if (Platform.isIOS) {
// 赋值ios客户单的版本号
_serviceVersionCode = appVersionData["versionCode"]["ios"];
// 赋值ios客户端的AppStore的URL
respAppVer["appStoreUrl"] = SERVER_AppStore_URL;
} else if (Platform.isAndroid) {
//android相关代码
_serviceVersionCode = appVersionData["versionCode"]["android"];
//GooglePlay的 下载URL
respAppVer["appStoreUrl"] = SERVER_GooglePlay_URL;
}
}
/// 比较本地版本号和服务端版本号的大小
respAppVer["isUpdate"] = await _checkVersionCode(_serviceVersionCode);
return respAppVer;
}
}
//检查版本更新的版本号
static _checkVersionCode(String appSerCode) {
String _appLocalCodeStr = UpdateApi.getAppLocalCode();
final _appSerCode = Version.parse(appSerCode);
final _appLocalCode = Version.parse(_appLocalCodeStr);
if (_appSerCode > _appLocalCode) {
return 1;
} else {
return 0;
}
}
}
源代码
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付