版本更新目录
2、获取当前应用版本号
插件:package_info_plus
//获取当前版本
static Future<String> getVersion() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String version = packageInfo.version;
return version;
}
3、检查服务器版本
后端有个version.jsong
[{
"current": true,
"All": {
"title": "发现新版本",
"version": "1.0.1",
"uptype": "min",
"contentTitle": "应用名称 v1.0.1",
"content": "1、各种Bug修复。",
"downUrl": "https://xxxx/xxxx/dy_drive_v1.0.1.apk"
}
}]
通过请求获取服务器版本
Future<Map<String, dynamic>> getLatesVersionInfo() async {
final result = await _dio.get(
https://xxxx/xxx/version.json + '?_t=' + _time.toString(),
);
Map<String, dynamic> lastRes = result.data.firstWhere(
(item) => item['current'] == true,
orElse: () => null,
);
return lastRes["All"];
}
插件:dio
插件地址:
4、比较版本
int result = compareVersions(
latesVersionInfo["version"],
currentVersion,
);
int compareVersions(String v1, String v2) {
List<int> getVersionComponents(String version) {
return version.split('.').map((e) => int.parse(e)).toList();
}
List<int> v1Components = getVersionComponents(v1);
List<int> v2Components = getVersionComponents(v2);
int minLength = v1Components.length < v2Components.length
? v1Components.length
: v2Components.length;
for (int i = 0; i < minLength; i++) {
if (v1Components[i] > v2Components[i]) return 1;
if (v1Components[i] < v2Components[i]) return -1;
}
if (v1Components.length > v2Components.length &&
v1Components[minLength] != 0)
return 1;
if (v1Components.length < v2Components.length &&
v2Components[minLength] != 0)
return -1;
return 0;
}
- result > 0 :需要更新版本
- result = 0 :已是最新版本
- result < 0 :版本号不对
5、提示用户有版本更新(提示组件)
自己写了一个版本更新提示框
import 'package:dy_driver/config/colors.dart';
import 'package:dy_driver/utils/toast_utils.dart';
import 'package:dy_driver/utils/version_utils.dart';
import 'package:flutter/material.dart';
import 'package:dy_driver/utils/global_setting.dart';
class VersionOverlay {
OverlayEntry? _overlayEntry;
static final VersionOverlay _instance = VersionOverlay._internal();
factory VersionOverlay() {
return _instance;
}
VersionOverlay._internal();