Quellcode durchsuchen

[new]增加谈话页面授权流程

zk vor 1 Jahr
Ursprung
Commit
7463c094b6
2 geänderte Dateien mit 94 neuen und 56 gelöschten Zeilen
  1. 54 20
      lib/module/talk/controller.dart
  2. 40 36
      lib/module/talk/view.dart

+ 54 - 20
lib/module/talk/controller.dart

@@ -9,7 +9,6 @@ import 'package:electronic_assistant/data/repositories/task_repository.dart';
 import 'package:electronic_assistant/utils/audio_picker_utils.dart';
 import 'package:electronic_assistant/handler/event_handler.dart';
 import 'package:electronic_assistant/module/chat/view.dart';
-import 'package:electronic_assistant/module/home/controller.dart';
 import 'package:electronic_assistant/module/login/view.dart';
 import 'package:electronic_assistant/module/store/view.dart';
 import 'package:electronic_assistant/module/talk/summary/view.dart';
@@ -109,6 +108,8 @@ class TalkController extends BaseController {
 
   String? eventTag;
 
+  bool isLocalFileHas = false;
+
   @override
   void onReady() {
     super.onReady();
@@ -184,6 +185,10 @@ class TalkController extends BaseController {
     } else {
       isUploading.value = false;
     }
+    _loadAudioFile(bean);
+  }
+
+  Future<void> _loadAudioFile(TalkBean? bean, {bool? loadPlay}) async {
     try {
       Uri? uri;
       if (bean?.isExample == true && bean?.audioUrl != null) {
@@ -198,6 +203,9 @@ class TalkController extends BaseController {
         throw '音频文件不存在';
       }
       await _audioPlayer.setAudioSource(AudioSource.uri(uri));
+      if (loadPlay == true) {
+        clickPlayAudio();
+      }
       audioFileIsExist = true;
     } catch (e) {
       audioFileIsExist = false;
@@ -219,11 +227,23 @@ class TalkController extends BaseController {
     _audioPlayer.seek(newPosition);
   }
 
-  void clickPlayAudio() {
-    if (audioFileIsExist != true) {
+  void clickPlayAudio() async {
+    if (audioFileIsExist != true && isLocalFileHas == false) {
       ToastUtil.showToast(StringName.talkFileNotFind.tr);
       return;
     }
+    if (isLocalFileHas == true &&
+        audioFileIsExist == false &&
+        !await AudioPickerUtils.hasPermission()) {
+      bool has = await AudioPickerUtils.requestPermissionExtend();
+      if (has == false) {
+        ToastUtil.showToast(StringName.authorizationFailed.tr);
+        return;
+      }
+      //重新加载
+      _loadAudioFile(talkBean.value, loadPlay: true);
+      return;
+    }
     if (isAudioLoading) {
       ToastUtil.showToast(StringName.talkAudioLoading.tr);
       return;
@@ -243,6 +263,18 @@ class TalkController extends BaseController {
       return;
     }
     File? file = await getFileByTalk(talkBean.value);
+    if (isLocalFileHas == true &&
+        audioFileIsExist == false &&
+        !await AudioPickerUtils.hasPermission()) {
+      bool has = await AudioPickerUtils.requestPermissionExtend();
+      if (has == false) {
+        ToastUtil.showToast(StringName.authorizationFailed.tr);
+        return;
+      }
+      //重新上传
+      _checkFileSizeAndNet();
+      return;
+    }
     if (file == null || !file.existsSync()) {
       ToastUtil.showToast(StringName.talkUploadFileNotExist.tr);
       return;
@@ -500,6 +532,25 @@ class TalkController extends BaseController {
     agendaNameController.clear();
   }
 
+  Future<File?> getFileByTalk(TalkBean? bean) async {
+    isLocalFileHas = false;
+    if (bean == null) {
+      return null;
+    }
+    if (bean.uploadType == TalkUploadType.localUpload) {
+      String? audioId =
+          FileUploadCheckHelper.getLocalAudioId(bean.localAudioUrl);
+      if (audioId != null && audioId.isNotEmpty) {
+        isLocalFileHas = true;
+        return await AudioPickerUtils.getAssetFile(audioId);
+      } else {
+        return await FileUploadCheckHelper.getChoiceUploadFile(bean.id);
+      }
+    } else {
+      return await RecordController.getRecordFile(bean.id);
+    }
+  }
+
   @override
   void onClose() {
     super.onClose();
@@ -509,20 +560,3 @@ class TalkController extends BaseController {
     _agendaNameController?.dispose();
   }
 }
-
-Future<File?> getFileByTalk(TalkBean? bean) async {
-  if (bean == null) {
-    return null;
-  }
-  if (bean.uploadType == TalkUploadType.localUpload) {
-    String? audioId = FileUploadCheckHelper.getLocalAudioId(bean.localAudioUrl);
-    if (audioId != null && audioId.isNotEmpty) {
-      return await AudioPickerUtils.getAssetFile(
-          FileUploadCheckHelper.getLocalAudioId(bean.localAudioUrl));
-    } else {
-      return await FileUploadCheckHelper.getChoiceUploadFile(bean.id);
-    }
-  } else {
-    return await RecordController.getRecordFile(bean.id);
-  }
-}

+ 40 - 36
lib/module/talk/view.dart

@@ -41,42 +41,7 @@ class TalkPage extends BasePage<TalkController> {
         child: Stack(
           children: [
             buildTopGradient(),
-            Scaffold(
-              backgroundColor: Colors.transparent,
-              appBar: AppBar(
-                actions: [
-                  _buildEditBtnView(),
-                ],
-                systemOverlayStyle: SystemUiOverlayStyle.dark,
-                backgroundColor: Colors.transparent,
-                leading: _buildAppbarBackView(),
-              ),
-              body: Builder(builder: (context) {
-                return Column(
-                  crossAxisAlignment: CrossAxisAlignment.start,
-                  children: [
-                    _buildHeaderView(),
-                    buildTabBar(context),
-                    Obx(() {
-                      return Visibility(
-                        visible: !controller.isEditModel,
-                        child: Divider(
-                            height: 1,
-                            color: const Color(0xFFf6f6f6),
-                            indent: 12.w,
-                            endIndent: 12.w),
-                      );
-                    }),
-                    Obx(() {
-                      return Visibility(
-                          visible: !controller.isEditModel,
-                          child: SizedBox(height: 8.h));
-                    }),
-                    buildTalkContentView()
-                  ],
-                );
-              }),
-            ),
+            _buildTalkContentView(),
             buildBottomView(),
             buildAIAnalysisView()
           ],
@@ -85,6 +50,45 @@ class TalkPage extends BasePage<TalkController> {
     );
   }
 
+  Scaffold _buildTalkContentView() {
+    return Scaffold(
+      backgroundColor: Colors.transparent,
+      appBar: AppBar(
+        actions: [
+          _buildEditBtnView(),
+        ],
+        systemOverlayStyle: SystemUiOverlayStyle.dark,
+        backgroundColor: Colors.transparent,
+        leading: _buildAppbarBackView(),
+      ),
+      body: Builder(builder: (context) {
+        return Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            _buildHeaderView(),
+            buildTabBar(context),
+            Obx(() {
+              return Visibility(
+                visible: !controller.isEditModel,
+                child: Divider(
+                    height: 1,
+                    color: const Color(0xFFf6f6f6),
+                    indent: 12.w,
+                    endIndent: 12.w),
+              );
+            }),
+            Obx(() {
+              return Visibility(
+                  visible: !controller.isEditModel,
+                  child: SizedBox(height: 8.h));
+            }),
+            buildTalkContentView()
+          ],
+        );
+      }),
+    );
+  }
+
   Padding _buildHeaderView() {
     return Padding(
       padding: EdgeInsets.symmetric(horizontal: 12.w),