simple_app_upgrade.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import 'package:dio/dio.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vitalapp/components/alert_dialog.dart';
  5. import 'package:vitalapp/managers/interfaces/models/upgrade.dart';
  6. import 'package:vitalapp/pages/settings/center/view.dart';
  7. import 'package:vitalapp/pages/upgrade/controller.dart';
  8. import 'package:fis_common/logger/logger.dart';
  9. class AppUpgradeWidget extends GetView<AppUpgradeController> {
  10. const AppUpgradeWidget({
  11. super.key,
  12. required this.model,
  13. this.onCanceled,
  14. this.onInstallReady,
  15. });
  16. final UpgradeCheckResultModel model;
  17. /// 取消
  18. final VoidCallback? onCanceled;
  19. /// 准备安装
  20. final VoidCallback? onInstallReady;
  21. @override
  22. Widget build(BuildContext context) {
  23. controller.state.updating = false;
  24. controller.state.progress = 0.0;
  25. return Obx(
  26. () {
  27. var content =
  28. "当前版本:${controller.state.currentVersion},最新版本:${model.version}, \n是否更新App?";
  29. logger
  30. .i("当前版本:${controller.state.currentVersion},最新版本:${model.version}");
  31. return VAlertDialog(
  32. title: controller.state.updating ? "下载新版本" : "提示",
  33. width: 400,
  34. confirmLabel: "安装",
  35. // showCancel: !model.isCoerce,
  36. content: Container(
  37. height: 80,
  38. padding: const EdgeInsets.symmetric(horizontal: 24),
  39. alignment: Alignment.center,
  40. child: Column(
  41. mainAxisAlignment: MainAxisAlignment.center,
  42. crossAxisAlignment: CrossAxisAlignment.center,
  43. children: [
  44. if (!controller.state.updating)
  45. Center(
  46. child: Text(
  47. content,
  48. softWrap: true,
  49. style: const TextStyle(fontSize: 20),
  50. ),
  51. ),
  52. if (controller.state.updating)
  53. Padding(
  54. padding: const EdgeInsets.symmetric(horizontal: 8.0),
  55. child: Column(
  56. children: [
  57. ProgressBar(
  58. progress: controller.state.progress,
  59. ),
  60. const SizedBox(
  61. height: 10,
  62. ),
  63. if (controller.state.progress != 1)
  64. const Center(child: Text("正在下载,请稍等")),
  65. if (controller.state.progress == 1)
  66. const Center(child: Text("下载完成")),
  67. ],
  68. ),
  69. ),
  70. ],
  71. ),
  72. ),
  73. onConfirm: isShowInstallBtn(model)
  74. ? () {
  75. if (controller.state.progress == 1) {
  76. logger.i("开始新版本,版本号:${model.version}");
  77. onInstallReady?.call();
  78. controller.installPackage(model.version); //安装
  79. } else {
  80. controller.state.cancelToken = CancelToken();
  81. logger.i("开始下载安装包,版本号::${model.version}");
  82. //下载
  83. controller.downloadPackage(model.version, model.downloadUrl,
  84. onProgress: (progress) {
  85. if (controller.state.updating) {
  86. controller.state.progress = progress;
  87. }
  88. if (controller.state.progress == 1) {
  89. controller.state.updating = false;
  90. logger.i("安装包下载完成,版本号::${model.version}");
  91. }
  92. });
  93. controller.state.updating = true;
  94. }
  95. }
  96. : null,
  97. onCanceled: () {
  98. onCanceled?.call();
  99. //取消
  100. controller.state.cancelToken?.cancel();
  101. controller.deleteFile(model.version); //删除本地安装包
  102. },
  103. );
  104. },
  105. );
  106. }
  107. bool isShowInstallBtn(UpgradeCheckResultModel model) {
  108. if (!model.isNeedUpdate) {
  109. return false;
  110. } else {
  111. if (controller.state.updating) {
  112. return false;
  113. }
  114. return true;
  115. }
  116. }
  117. }