simple_app_upgrade.dart 4.1 KB

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