|
@@ -509,8 +509,59 @@ Future<bool> checkNewVersion(BuildContext context, WidgetRef ref) async {
|
509
|
509
|
} catch (e) {
|
510
|
510
|
loge("检查更新转换版本号异常", error: e);
|
511
|
511
|
}
|
512
|
|
- if (versionCode >= serverCode) {
|
513
|
|
- return false;
|
|
512
|
+ //ios的version和code都需要比较,因为对于同一版本,ios发布时会自动提升code
|
|
513
|
+ //不同版本又会从pubspec.yaml里填写的code重新计算
|
|
514
|
+ if (Platform.isIOS) {
|
|
515
|
+ if (info.version.isNullOrEmpty) {
|
|
516
|
+ logd("ios比较版本,服务器version为空");
|
|
517
|
+ return false;
|
|
518
|
+ }
|
|
519
|
+ //把服务器的版本号转为数字数组
|
|
520
|
+ List<int> serverVersionNums = info.version!.split(".").map((e) {
|
|
521
|
+ try {
|
|
522
|
+ return int.parse(e);
|
|
523
|
+ } catch (e) {
|
|
524
|
+ loge("转换服务器版本字符到异常", error: e);
|
|
525
|
+ }
|
|
526
|
+ return 0;
|
|
527
|
+ }).toList();
|
|
528
|
+ //把本地的版本号转为数字数组
|
|
529
|
+ List<int> currentVersionNums = packageInfo.version.split(".").map((e) {
|
|
530
|
+ try {
|
|
531
|
+ return int.parse(e);
|
|
532
|
+ } catch (e) {
|
|
533
|
+ loge("转换本地版本字符到异常", error: e);
|
|
534
|
+ }
|
|
535
|
+ return 0;
|
|
536
|
+ }).toList();
|
|
537
|
+ //如果本地长度小于服务器长度,则补齐本地数组
|
|
538
|
+ if (currentVersionNums.length < serverVersionNums.length) {
|
|
539
|
+ currentVersionNums.addAll(List.filled(
|
|
540
|
+ serverVersionNums.length - currentVersionNums.length, -1));
|
|
541
|
+ }
|
|
542
|
+ //从左到右比较数字大小,只要服务器有一个大于本地的就认为需要升级
|
|
543
|
+ bool needUpdate = false;
|
|
544
|
+ bool sameVersion = true;
|
|
545
|
+ for (int i = 0; i < serverVersionNums.length; i++) {
|
|
546
|
+ if (serverVersionNums[i] != currentVersionNums[i]) {
|
|
547
|
+ sameVersion = false;
|
|
548
|
+ }
|
|
549
|
+ if (serverVersionNums[i] > currentVersionNums[i]) {
|
|
550
|
+ needUpdate = true;
|
|
551
|
+ break;
|
|
552
|
+ }
|
|
553
|
+ }
|
|
554
|
+ //如果版本号都一致,就判断code的大小
|
|
555
|
+ if (!needUpdate && sameVersion && serverCode > versionCode) {
|
|
556
|
+ needUpdate = true;
|
|
557
|
+ }
|
|
558
|
+ return needUpdate;
|
|
559
|
+ }
|
|
560
|
+ //其他的只需要判断code
|
|
561
|
+ else {
|
|
562
|
+ if (versionCode >= serverCode) {
|
|
563
|
+ return false;
|
|
564
|
+ }
|
514
|
565
|
}
|
515
|
566
|
if (context.mounted) {
|
516
|
567
|
showDialog(
|