Explorar el Código

ios版本检查逻辑优化

gjh hace 1 semana
padre
commit
5d4ac3bebf
Se han modificado 1 ficheros con 53 adiciones y 2 borrados
  1. 53 2
      lib/funcs.dart

+ 53 - 2
lib/funcs.dart

@@ -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(