app_version.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /// 版本信息 — POST uc/ancillary/system/app/version/0
  2. class AppVersion {
  3. final String id;
  4. final String publishTime;
  5. final String remark;
  6. final String newVersion;
  7. final String downloadUrl;
  8. final String platform;
  9. final String lowestVersion;
  10. final String updateDescription;
  11. const AppVersion({
  12. this.id = '',
  13. this.publishTime = '',
  14. this.remark = '',
  15. this.newVersion = '',
  16. this.downloadUrl = '',
  17. this.platform = '',
  18. this.lowestVersion = '',
  19. this.updateDescription = '',
  20. });
  21. factory AppVersion.fromJson(Map<String, dynamic> json) {
  22. return AppVersion(
  23. id: json['id']?.toString() ?? '',
  24. publishTime: json['publishTime']?.toString() ?? '',
  25. remark: json['remark']?.toString() ?? '',
  26. newVersion: json['version']?.toString() ?? '',
  27. downloadUrl: json['downloadUrl']?.toString() ?? '',
  28. platform: json['platform']?.toString() ?? '',
  29. lowestVersion: json['lowestVersion']?.toString() ?? '',
  30. updateDescription: json['updateDescription']?.toString() ?? '',
  31. );
  32. }
  33. /// 是否有新版本(newVersion > currentVersion)
  34. bool hasNewVersion(String currentVersion) {
  35. return _compareVersion(newVersion, currentVersion) > 0;
  36. }
  37. /// 是否需要强制更新(lowestVersion > currentVersion)
  38. bool isForceUpdate(String currentVersion) {
  39. if (lowestVersion.isEmpty) return false;
  40. return _compareVersion(lowestVersion, currentVersion) > 0;
  41. }
  42. /// 版本号比较:按 . 分割逐段比较
  43. /// 返回 >0 表示 a > b, <0 表示 a < b, 0 表示相等
  44. static int _compareVersion(String a, String b) {
  45. if (a.isEmpty || b.isEmpty) return 0;
  46. final partsA = a.split('.').map((e) => int.tryParse(e) ?? 0).toList();
  47. final partsB = b.split('.').map((e) => int.tryParse(e) ?? 0).toList();
  48. final maxLen = partsA.length > partsB.length ? partsA.length : partsB.length;
  49. for (var i = 0; i < maxLen; i++) {
  50. final va = i < partsA.length ? partsA[i] : 0;
  51. final vb = i < partsB.length ? partsB[i] : 0;
  52. if (va != vb) return va - vb;
  53. }
  54. return 0;
  55. }
  56. }