isLower static method
判断当前版本是否小于默认指定版本
- 如果版本号不一致,当前 > 新,则返回false,当前 < 新,则返回true,相等继续执行
- 判断前缀版本字符,如果遍历中,(当前 < 新 / 当前为空),则返回true
- 如果前面都为返回,则默认返回false
Implementation
static bool isLower(String? versionCurrent, String? versionTarget) {
/// 在 当前 为空,新 不为空 时,默认表示低于版本(一般大版本时会存在)
/// 在 新 为空,默认返回不为低版本
if ((versionCurrent?.isEmpty ?? true) && versionTarget != null) {
return true;
} else if (versionTarget?.isEmpty ?? true) {
return false;
}
const splitVersionNum = '+';
const splitVersionDot = '.';
int? versionNumCurrent;
int? versionNumTarget;
late String versionStrCurrent;
late String versionStrTarget;
if (versionCurrent!.contains(splitVersionNum)) {
final arr = versionCurrent.split(splitVersionNum);
versionNumCurrent = int.tryParse(arr.last);
versionStrCurrent = formatVersionStr(arr.first);
} else {
versionStrCurrent = formatVersionStr(versionCurrent);
}
if (versionTarget!.contains(splitVersionNum)) {
final arr = versionTarget.split(splitVersionNum);
versionNumTarget = int.tryParse(arr.last);
versionStrTarget = formatVersionStr(arr.first);
} else {
versionStrTarget = formatVersionStr(versionTarget);
}
// 判断版本号,如果小于则直接返回
if (versionNumCurrent != null && versionNumTarget != null) {
if (versionNumCurrent < versionNumTarget) {
return true;
} else if (versionNumCurrent > versionNumTarget) {
return false;
}
// 相等则继续往下执行
}
// 判断版本号字符
final List<String> nowSplitArr = versionStrCurrent.split(splitVersionDot);
final List<String> newSplitArr = versionStrTarget.split(splitVersionDot);
for (int i = 0; i < math.max(nowSplitArr.length, newSplitArr.length); i++) {
final nowStr = nowSplitArr.length >= (i + 1) ? nowSplitArr[i] : '';
final newStr = newSplitArr.length >= (i + 1) ? newSplitArr[i] : '';
final current = int.tryParse(nowStr);
final target = int.tryParse(newStr);
if (current != null && target != null) {
if (current < target) {
return true;
} else if (current > target) {
return false;
} else {
continue;
}
} else if (current != null && target == null) {
continue;
} else if (current == null && target != null) {
return true;
}
}
return false;
}