Browse Source

[new]增加谈话上传状态显示

zk 1 year ago
parent
commit
14bffb3ad9

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

@@ -74,4 +74,5 @@
     <string name="account_profession_and_post_update_success">更新成功</string>
     <string name="account_profession_and_post_update_success">更新成功</string>
     <string name="account_profession_suggest">请输入行业</string>
     <string name="account_profession_suggest">请输入行业</string>
     <string name="account_post_suggest">请输入岗位</string>
     <string name="account_post_suggest">请输入岗位</string>
+    <string name="talk_uploading_tips">小听正在上传谈话,请稍等~</string>
 </resources>
 </resources>

+ 8 - 2
lib/data/repositories/talk_repository.dart

@@ -4,9 +4,7 @@ import 'package:electronic_assistant/data/api/atmob_api.dart';
 import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
-import 'package:flutter/widgets.dart';
 import 'package:get/get.dart';
 import 'package:get/get.dart';
-
 import '../../utils/http_handler.dart';
 import '../../utils/http_handler.dart';
 import '../api/request/talk_generate_request.dart';
 import '../api/request/talk_generate_request.dart';
 import '../api/request/talk_paginate_request.dart';
 import '../api/request/talk_paginate_request.dart';
@@ -22,10 +20,16 @@ import 'account_repository.dart';
 class TalkRepository {
 class TalkRepository {
   TalkRepository._();
   TalkRepository._();
 
 
+  final Set<String> _uploadingTalkIds = {};
+
   final _talkList = RxList<TalkBean>();
   final _talkList = RxList<TalkBean>();
 
 
   RxList<TalkBean> get talkList => _talkList;
   RxList<TalkBean> get talkList => _talkList;
 
 
+  bool isUploadingTalk(String talkId) {
+    return _uploadingTalkIds.contains(talkId);
+  }
+
   void renovateTalkData(TalkBean talkInfo) {
   void renovateTalkData(TalkBean talkInfo) {
     for (int i = 0; i < _talkList.length; i++) {
     for (int i = 0; i < _talkList.length; i++) {
       if (_talkList[i].id == talkInfo.id) {
       if (_talkList[i].id == talkInfo.id) {
@@ -127,10 +131,12 @@ class TalkRepository {
   }
   }
 
 
   Future<String> uploadTalkFile(String talkId, double duration, File file) {
   Future<String> uploadTalkFile(String talkId, double duration, File file) {
+    _uploadingTalkIds.add(talkId);
     return atmobApi
     return atmobApi
         .uploadTalkFile(TalkFileRequest(talkId, duration, file: file).toJson())
         .uploadTalkFile(TalkFileRequest(talkId, duration, file: file).toJson())
         .then(HttpHandler.handle(true))
         .then(HttpHandler.handle(true))
         .then((response) {
         .then((response) {
+      _uploadingTalkIds.remove(talkId);
       return response.taskId;
       return response.taskId;
     });
     });
   }
   }

+ 19 - 0
lib/module/talk/common_view.dart

@@ -10,6 +10,25 @@ import '../../resource/assets.gen.dart';
 import '../../resource/colors.gen.dart';
 import '../../resource/colors.gen.dart';
 import '../../resource/string.gen.dart';
 import '../../resource/string.gen.dart';
 
 
+Widget getTalkUploadingView() {
+  return SizedBox(
+    width: double.infinity,
+    child: Column(
+      children: [
+        SizedBox(height: 138.h),
+        SizedBox(
+            width: 100.w,
+            height: 100.w,
+            child: Assets.anim.talkAnalyse.image()),
+        SizedBox(height: 12.h),
+        Text(StringName.talkUploadingTips.tr,
+            style:
+                TextStyle(fontSize: 14.sp, color: ColorName.secondaryTextColor))
+      ],
+    ),
+  );
+}
+
 Widget getTalkLoadingView() {
 Widget getTalkLoadingView() {
   return SizedBox(
   return SizedBox(
     width: double.infinity,
     width: double.infinity,

+ 10 - 5
lib/module/talk/controller.dart

@@ -2,7 +2,6 @@ import 'dart:async';
 import 'dart:io';
 import 'dart:io';
 
 
 import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/base/base_controller.dart';
-import 'package:electronic_assistant/data/repositories/account_repository.dart';
 import 'package:electronic_assistant/data/repositories/task_repository.dart';
 import 'package:electronic_assistant/data/repositories/task_repository.dart';
 import 'package:electronic_assistant/module/chat/view.dart';
 import 'package:electronic_assistant/module/chat/view.dart';
 import 'package:electronic_assistant/module/talk/summary/view.dart';
 import 'package:electronic_assistant/module/talk/summary/view.dart';
@@ -42,6 +41,8 @@ class TalkController extends BaseController {
 
 
   bool? isUploadedFile;
   bool? isUploadedFile;
 
 
+  Rxn<bool> isUploading = Rxn();
+
   final isAudioPlaying = false.obs;
   final isAudioPlaying = false.obs;
 
 
   final audioProgressValue = 0.0.obs;
   final audioProgressValue = 0.0.obs;
@@ -118,6 +119,12 @@ class TalkController extends BaseController {
     if (id == null) {
     if (id == null) {
       return;
       return;
     }
     }
+    if (talkRepository.isUploadingTalk(id) &&
+        talkBean.value?.status.value == TalkStatus.notAnalysis) {
+      isUploading.value = true;
+    } else {
+      isUploading.value = false;
+    }
     try {
     try {
       File file = await RecordController.getRecordFile(id);
       File file = await RecordController.getRecordFile(id);
       await _audioPlayer.setAudioSource(AudioSource.uri(file.uri));
       await _audioPlayer.setAudioSource(AudioSource.uri(file.uri));
@@ -271,14 +278,12 @@ class TalkController extends BaseController {
     if (talkId == null || duration == null || isUploadedFile == true) {
     if (talkId == null || duration == null || isUploadedFile == true) {
       return;
       return;
     }
     }
+    isUploading.value = true;
     talkRepository.uploadTalkFile(talkId, duration, file).then((taskId) {
     talkRepository.uploadTalkFile(talkId, duration, file).then((taskId) {
-      ToastUtil.showToast('提交成功,小听正在分析谈话,请稍后');
       isUploadedFile = true;
       isUploadedFile = true;
-      TalkBean? bean = talkBean.value;
-      bean?.taskId = talkId;
-      bean?.status.value = TalkStatus.analysing;
       taskRepository.addTask(taskId);
       taskRepository.addTask(taskId);
     }).catchError((error) {
     }).catchError((error) {
+      isUploading.value = false;
       ErrorHandler.toastError(error);
       ErrorHandler.toastError(error);
     });
     });
   }
   }

+ 7 - 41
lib/module/talk/view.dart

@@ -12,6 +12,7 @@ import '../../resource/assets.gen.dart';
 import '../../resource/string.gen.dart';
 import '../../resource/string.gen.dart';
 import '../../router/app_pages.dart';
 import '../../router/app_pages.dart';
 import '../../utils/common_style.dart';
 import '../../utils/common_style.dart';
+import 'common_view.dart';
 
 
 class TalkPage extends BasePage<TalkController> {
 class TalkPage extends BasePage<TalkController> {
   const TalkPage({super.key});
   const TalkPage({super.key});
@@ -134,6 +135,8 @@ class TalkPage extends BasePage<TalkController> {
       if (controller.talkBean.value?.status.value == TalkStatus.notAnalysis) {
       if (controller.talkBean.value?.status.value == TalkStatus.notAnalysis) {
         if (controller.isShowElectricLow.value) {
         if (controller.isShowElectricLow.value) {
           return buildElectricLowView();
           return buildElectricLowView();
+        } else if (controller.isUploading.value == true) {
+          return buildElectricUploading();
         } else {
         } else {
           return buildNotAnalysisView();
           return buildNotAnalysisView();
         }
         }
@@ -143,6 +146,10 @@ class TalkPage extends BasePage<TalkController> {
     });
     });
   }
   }
 
 
+  Widget buildElectricUploading() {
+    return getTalkUploadingView();
+  }
+
   Widget buildTabContentView() {
   Widget buildTabContentView() {
     return Expanded(
     return Expanded(
       child: TabBarView(
       child: TabBarView(
@@ -362,44 +369,3 @@ class CustomTrackShape extends RoundedRectSliderTrackShape {
     return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);
     return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);
   }
   }
 }
 }
-
-// class EnhancedShadowSliderThumbShape extends RoundSliderThumbShape {
-//   final double thumbRadius;
-//   final double elevation;
-//   final double shadowOffsetY;
-//
-//   EnhancedShadowSliderThumbShape({
-//     required this.thumbRadius,
-//     this.elevation = 8.0,
-//     this.shadowOffsetY = 0, // 阴影向下偏移量
-//   });
-//
-//   @override
-//   void paint(
-//       PaintingContext context,
-//       Offset center, {
-//         required Animation<double> activationAnimation,
-//         required Animation<double> enableAnimation,
-//         required bool isDiscrete,
-//         required TextPainter labelPainter,
-//         required RenderBox parentBox,
-//         required SliderThemeData sliderTheme,
-//         required TextDirection textDirection,
-//         required double value,
-//         required double textScaleFactor,
-//         required Size sizeWithOverflow,
-//       }) {
-//     final Canvas canvas = context.canvas;
-//     final Paint shadowPaint = Paint()
-//       ..color = Colors.black.withOpacity(0.25)
-//       ..maskFilter = MaskFilter.blur(BlurStyle.normal, elevation);
-//
-//     final Paint thumbPaint = Paint()
-//       ..color = sliderTheme.thumbColor!
-//       ..style = PaintingStyle.fill;
-//
-//     // 调整阴影的绘制位置,使其向下偏移
-//     canvas.drawCircle(center.translate(0, shadowOffsetY), thumbRadius + 2, shadowPaint);
-//     canvas.drawCircle(center, thumbRadius, thumbPaint);
-//   }
-// }