Forráskód Böngészése

[new]增加文件上传网络状态判断

zk 1 éve
szülő
commit
33426d5c5c

+ 4 - 0
assets/string/base/string.xml

@@ -63,4 +63,8 @@
     <string name="record_status_pending">准备开始录音</string>
     <string name="record_status_recording">我正在听...</string>
     <string name="record_status_paused">录音已暂停</string>
+    <string name="talk_traffic_remind_title">您未在WIFI环境中,此次分析约消耗%s的流量,请问是否继续?
+    </string>
+    <string name="talk_traffic_remind_tips">以后不再提示</string>
+    <string name="talk_upload_file_not_exist">文件不存在</string>
 </resources>

+ 1 - 1
lib/base/base_request.dart

@@ -114,6 +114,6 @@ class BaseRequest {
   }
 
   void initDeviceInfo() {
-    androidId = "1123123qweqw1";
+    androidId = "1123123qweqw12";
   }
 }

+ 1 - 1
lib/main.dart

@@ -18,7 +18,7 @@ void main() async {
   //获取包信息
   appInfoUtil.init();
   //mmkv
-  KVUtil.init();
+  await KVUtil.init();
 
   runApp(const MyApp());
 }

+ 105 - 7
lib/module/talk/controller.dart

@@ -1,19 +1,30 @@
 import 'dart:async';
+import 'dart:io';
 
 import 'package:electronic_assistant/base/base_controller.dart';
-import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:electronic_assistant/module/talk/summary/view.dart';
 import 'package:electronic_assistant/module/talk/todo/view.dart';
+import 'package:electronic_assistant/resource/assets.gen.dart';
+import 'package:electronic_assistant/resource/colors.gen.dart';
 import 'package:electronic_assistant/resource/string.gen.dart';
-import 'package:electronic_assistant/utils/toast_util.dart';
+import 'package:electronic_assistant/utils/expand.dart';
+import 'package:electronic_assistant/utils/mmkv_util.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
-
+import 'package:connectivity_plus/connectivity_plus.dart';
 import '../../data/bean/agenda_list_all_bean.dart';
 import '../../data/bean/talks.dart';
 import '../../data/repositories/agenda_repository.dart';
+import '../../data/repositories/talk_repository.dart';
+import '../../dialog/alert_dialog.dart';
+import '../../utils/toast_util.dart';
+import '../record/controller.dart';
 import 'original/view.dart';
 
 class TalkController extends BaseController {
+  final String uploadNoPrompts = "UPLOAD_NO_PROMPTS";
+
   final Rxn<TalkBean> talkBean = Rxn();
 
   final isShowElectricLow = false.obs;
@@ -55,7 +66,94 @@ class TalkController extends BaseController {
     }
   }
 
-  void checkCanAnalyze() {
+  void _checkFileSizeAndNet() async {
+    String? id = talkBean.value?.id;
+    if (id == null) {
+      return;
+    }
+    File file = await RecordController.getRecordFile(id);
+    if (!file.existsSync()) {
+      ToastUtil.showToast(StringName.talkUploadFileNotExist.tr);
+      return;
+    }
+    bool isCheckRemind = KVUtil.getBool(uploadNoPrompts, false);
+    if (isCheckRemind) {
+      _requestAnalyze(file);
+      return;
+    }
+    //如果文件大小低于250MB 不弹窗提醒
+    if (file.lengthSync() < 250 * 1024 * 1024) {
+      _requestAnalyze(file);
+      return;
+    }
+
+    final List<ConnectivityResult> connectivityResult =
+        await (Connectivity().checkConnectivity());
+    if (connectivityResult.contains(ConnectivityResult.wifi)) {
+      _requestAnalyze(file);
+    } else {
+      _showTrafficRemindDialog(file.lengthSync().toReadableSize(),
+          confirmOnTap: (isCheckRemind) {
+        if (isCheckRemind) {
+          KVUtil.putBool(uploadNoPrompts, true);
+        }
+        _requestAnalyze(file);
+      });
+    }
+  }
+
+  void _showTrafficRemindDialog(String holderTxt,
+      {void Function(bool isCheckRemind)? confirmOnTap}) {
+    final remindTrafficConsume = false.obs;
+
+    Widget getSelectIcon() {
+      return Obx(() {
+        return remindTrafficConsume.value
+            ? Assets.images.iconSelectTrue.image()
+            : Assets.images.iconSelectFalse.image();
+      });
+    }
+
+    Assets.images.iconSelectTrue.image();
+
+    EAAlertDialog.show(
+        contentWidget: Column(
+          children: [
+            Text(
+              StringName.talkTrafficRemindTitle.tr
+                  .replacePlaceholders([holderTxt]),
+              style:
+                  TextStyle(fontSize: 15.sp, color: ColorName.primaryTextColor),
+            ),
+            SizedBox(height: 8.h),
+            GestureDetector(
+              onTap: () {
+                remindTrafficConsume.value = !remindTrafficConsume.value;
+              },
+              child: IntrinsicWidth(
+                child: Row(
+                  children: [
+                    SizedBox(width: 20.w, height: 20.w, child: getSelectIcon()),
+                    SizedBox(width: 5.w),
+                    Text(
+                      StringName.talkTrafficRemindTips.tr,
+                      style: TextStyle(
+                          fontSize: 15.sp, color: ColorName.tertiaryTextColor),
+                    )
+                  ],
+                ),
+              ),
+            )
+          ],
+        ),
+        cancelText: StringName.cancel.tr,
+        confirmText: StringName.sure.tr,
+        confirmOnTap: () {
+          confirmOnTap?.call(remindTrafficConsume.value);
+        });
+  }
+
+  void checkCanAnalyze() async {
     String? id = talkBean.value?.id;
     double? duration = talkBean.value?.duration;
     if (id == null || duration == null) {
@@ -63,8 +161,8 @@ class TalkController extends BaseController {
     }
     talkRepository.checkElectric(duration).then((data) {
       if (data.enough) {
-        //提交分析
-        _requestAnalyze();
+        //检查网络以及文件大小
+        _checkFileSizeAndNet();
       } else {
         ToastUtil.showToast(StringName.talkAnalyseLowToast.tr);
         isShowElectricLow.value = true;
@@ -74,7 +172,7 @@ class TalkController extends BaseController {
     });
   }
 
-  void _requestAnalyze() {
+  void _requestAnalyze(File file) {
     //提交文件
   }
 

+ 21 - 0
lib/utils/expand.dart

@@ -54,3 +54,24 @@ extension StringExtensions on String {
     return result;
   }
 }
+
+extension FileSizeExtension on int {
+  String toReadableSize() {
+    String format(double value) {
+      String result = value.toStringAsFixed(2);
+      result = result.replaceAll(RegExp(r'0*$'), ''); // 去除多余的零
+      result = result.replaceAll(RegExp(r'\.$'), ''); // 如果最后是小数点,则去除
+      return result;
+    }
+
+    if (this < 1024) {
+      return '$this B';
+    } else if (this < 1024 * 1024) {
+      return '${format(this / 1024)} KB';
+    } else if (this < 1024 * 1024 * 1024) {
+      return '${format(this / (1024 * 1024))} MB';
+    } else {
+      return '${format(this / (1024 * 1024 * 1024))} GB';
+    }
+  }
+}

+ 18 - 10
lib/utils/mmkv_util.dart

@@ -6,39 +6,47 @@ class KVUtil {
   static MMKV? mmkv;
 
   static init() async {
+    if (mmkv != null) {
+      return;
+    }
     await MMKV.initialize();
     mmkv = MMKV.defaultMMKV();
   }
 
   static void putString(String key, String? value) {
-    mmkv?.encodeString(key, value);
+    _getMMKV().encodeString(key, value);
   }
 
   static String? getString(String key, String? defaultValue) {
-    return mmkv?.decodeString(key) ?? defaultValue;
+    return _getMMKV().decodeString(key) ?? defaultValue;
   }
 
   static void putInt(String key, int value) {
-    mmkv?.encodeInt(key, value);
+    _getMMKV().encodeInt(key, value);
   }
 
   static int? getInt(String key, int defaultValue) {
-    return mmkv?.decodeInt(key, defaultValue: defaultValue);
+    return _getMMKV().decodeInt(key, defaultValue: defaultValue);
   }
 
   static void putBool(String key, bool value) {
-    mmkv?.encodeBool(key, value);
+    _getMMKV().encodeBool(key, value);
   }
 
-  static bool? getBool(String key, bool defaultValue) {
-    return mmkv?.decodeBool(key, defaultValue: defaultValue);
+  static bool getBool(String key, bool defaultValue) {
+    return _getMMKV().decodeBool(key, defaultValue: defaultValue);
   }
 
   static void putDouble(String key, double value) {
-    mmkv?.encodeDouble(key, value);
+    _getMMKV().encodeDouble(key, value);
   }
 
-  static double? getDouble(String key, double defaultValue) {
-    return mmkv?.decodeDouble(key, defaultValue: defaultValue);
+  static double getDouble(String key, double defaultValue) {
+    return _getMMKV().decodeDouble(key, defaultValue: defaultValue);
+  }
+
+  static MMKV _getMMKV() {
+    mmkv ??= MMKV.defaultMMKV();
+    return mmkv!;
   }
 }

+ 3 - 0
pubspec.yaml

@@ -69,6 +69,9 @@ dependencies:
   #uuid
   uuid: ^4.5.0
 
+  #网络连接类型
+  connectivity_plus: ^6.0.5
+
 dev_dependencies:
   flutter_test:
     sdk: flutter