瀏覽代碼

0016049: 【APP】【升级】升级时下载新版本的过程中,点击安装,会循环下载,下载过程中,应不显示安装按键

finlay 1 年之前
父節點
當前提交
184e1f21dd

+ 4 - 0
lib/managers/interfaces/upgrade.dart

@@ -1,3 +1,4 @@
+import 'package:dio/dio.dart';
 import 'package:flutter/foundation.dart';
 import 'package:vitalapp/managers/interfaces/base.dart';
 
@@ -22,10 +23,13 @@ abstract class IUpgradeManager implements IManager {
   /// [url] 文件链接
   ///
   /// [onProgress] 下载进度回调,0~1.0
+  ///
+  /// [cancelToken] 取消下载标识
   Future<bool> downloadPackage(
     String version,
     String url, {
     ValueChanged<double>? onProgress,
+    CancelToken? cancelToken,
   });
 
   /// 安装版本

+ 2 - 0
lib/managers/upgrade.dart

@@ -55,6 +55,7 @@ class UpgradeManager implements IUpgradeManager {
     String version,
     String url, {
     ValueChanged<double>? onProgress,
+    CancelToken? cancelToken,
   }) async {
     try {
       final savePath = await _getApkFilePath(version);
@@ -62,6 +63,7 @@ class UpgradeManager implements IUpgradeManager {
       await dio.download(
         url,
         savePath,
+        cancelToken: cancelToken,
         onReceiveProgress: (received, total) {
           if (total != -1) {
             // 计算进度

+ 22 - 20
lib/pages/settings/center/view.dart

@@ -4,6 +4,7 @@ import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/components/alert_dialog.dart';
 import 'package:vitalapp/components/side_nav/defines.dart';
 import 'package:vitalapp/components/side_nav/side_nav.dart';
+import 'package:vitalapp/global.dart';
 import 'package:vitalapp/pages/settings/about/view.dart';
 import 'package:vitalapp/pages/settings/devices/controller.dart';
 import 'package:vitalapp/pages/settings/devices/view.dart';
@@ -104,26 +105,27 @@ class SettingCenterPage extends GetView<SettingCenterController> {
             titleTextStyle: const TextStyle(fontSize: 24, color: Colors.black),
             actionsAlignment: MainAxisAlignment.spaceAround,
             actions: [
-              TextButton(
-                onPressed: () async {
-                  var result = await controller.checkNewVersionArrival();
-                  if (result != null && result.isNeedUpdate) {
-                    final AppUpgradeController appUpgradeController =
-                        Get.put(AppUpgradeController());
-                    Get.dialog(
-                      GetBuilder<AppUpgradeController>(
-                        builder: (_) => AppUpgradeWidget(model: result),
-                        init: appUpgradeController,
-                      ),
-                      barrierDismissible: false,
-                      barrierColor: Colors.black.withOpacity(.4),
-                    );
-                  } else if (result != null && !result.isNeedUpdate) {
-                    PromptBox.toast('当前版本为最新版本');
-                  }
-                },
-                child: const Text('检查更新'),
-              ),
+              if (kIsOnline)
+                TextButton(
+                  onPressed: () async {
+                    var result = await controller.checkNewVersionArrival();
+                    if (result != null && result.isNeedUpdate) {
+                      final AppUpgradeController appUpgradeController =
+                          Get.put(AppUpgradeController());
+                      Get.dialog(
+                        GetBuilder<AppUpgradeController>(
+                          builder: (_) => AppUpgradeWidget(model: result),
+                          init: appUpgradeController,
+                        ),
+                        barrierDismissible: false,
+                        barrierColor: Colors.black.withOpacity(.4),
+                      );
+                    } else if (result != null && !result.isNeedUpdate) {
+                      PromptBox.toast('当前版本为最新版本');
+                    }
+                  },
+                  child: const Text('检查更新'),
+                ),
             ],
             contentPadding: const EdgeInsets.only(top: 20, bottom: 8),
             content: SizedBox(

+ 4 - 6
lib/pages/upgrade/controller.dart

@@ -1,3 +1,4 @@
+import 'package:dio/dio.dart';
 import 'package:flutter/foundation.dart';
 import 'package:get/get.dart';
 import 'package:vitalapp/managers/interfaces/models/upgrade.dart';
@@ -20,13 +21,10 @@ class AppUpgradeController extends GetxController {
     return result;
   }
 
-  Future<bool> downloadPackage(
-    String version,
-    String url, {
-    ValueChanged<double>? onProgress,
-  }) async {
+  Future<bool> downloadPackage(String version, String url,
+      {ValueChanged<double>? onProgress}) async {
     final result = await upgradeManager.downloadPackage(version, url,
-        onProgress: onProgress);
+        onProgress: onProgress, cancelToken: state.cancelToken);
     return result;
   }
 

+ 3 - 0
lib/pages/upgrade/state.dart

@@ -1,3 +1,4 @@
+import 'package:dio/dio.dart';
 import 'package:get/get.dart';
 
 class AppUpgradeState {
@@ -5,6 +6,8 @@ class AppUpgradeState {
   final RxDouble _progress = RxDouble(0.0);
   final RxString _currentVersion = ''.obs;
 
+  CancelToken? cancelToken;
+
   /// 是否正在更新
   bool get updating => _updating.value;
   set updating(bool val) => _updating.value = val;

+ 18 - 2
lib/pages/upgrade/widget/simple_app_upgrade.dart

@@ -1,3 +1,4 @@
+import 'package:dio/dio.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:vitalapp/components/alert_dialog.dart';
@@ -58,16 +59,19 @@ class AppUpgradeWidget extends GetView<AppUpgradeController> {
               ],
             ),
           ),
-          onConfirm: model.isNeedUpdate
+          onConfirm: isShowInstallBtn(model)
               ? () {
                   if (controller.state.progress == 1) {
                     controller.installPackage(//安装
                         model.version);
                   } else {
+                    controller.state.cancelToken = CancelToken();
                     //下载
                     controller.downloadPackage(model.version, model.downloadUrl,
                         onProgress: (progress) {
-                      controller.state.progress = progress;
+                      if (controller.state.updating) {
+                        controller.state.progress = progress;
+                      }
                     });
                     controller.state.updating = true;
                   }
@@ -75,10 +79,22 @@ class AppUpgradeWidget extends GetView<AppUpgradeController> {
               : null,
           onCanceled: () {
             //取消
+            controller.state.cancelToken?.cancel();
             controller.deleteFile(model.version); //删除本地安装包
           },
         );
       },
     );
   }
+
+  bool isShowInstallBtn(UpgradeCheckResultModel model) {
+    if (!model.isNeedUpdate) {
+      return false;
+    } else {
+      if (controller.state.updating) {
+        return false;
+      }
+      return true;
+    }
+  }
 }