Browse Source

[modify]优化谈话与待办流程

zk 1 year ago
parent
commit
ad76347037

+ 26 - 37
lib/data/bean/talks.dart

@@ -1,3 +1,4 @@
+import 'package:get/get.dart';
 import 'package:json_annotation/json_annotation.dart';
 
 part 'talks.g.dart';
@@ -22,14 +23,14 @@ class TalkBean {
   @JsonKey(name: 'characters')
   int? characters;
 
-  @JsonKey(name: 'status')
-  int? status;
+  @JsonKey(name: 'status', fromJson: _intFromJson, includeToJson: false)
+  Rxn<int> status;
 
-  @JsonKey(name: 'title')
-  String? title;
+  @JsonKey(name: 'title', fromJson: _stringFromJson, includeToJson: false)
+  Rxn<String> title;
 
-  @JsonKey(name: 'summary')
-  String? summary;
+  @JsonKey(name: 'summary', fromJson: _stringFromJson, includeToJson: false)
+  Rxn<String> summary;
 
   @JsonKey(name: 'createTime')
   String? createTime;
@@ -47,9 +48,9 @@ class TalkBean {
       this.audioUrl,
       this.duration,
       this.characters,
-      this.status,
-      this.title,
-      this.summary,
+      required this.status,
+      required this.title,
+      required this.summary,
       this.createTime,
       this.isExample,
       this.oversizeFile});
@@ -57,34 +58,22 @@ class TalkBean {
   factory TalkBean.fromJson(Map<String, dynamic> json) =>
       _$TalkBeanFromJson(json);
 
-  TalkBean copyWith({
-    String? id,
-    String? taskId,
-    String? ssid,
-    String? audioUrl,
-    double? duration,
-    int? characters,
-    int? status,
-    String? title,
-    String? summary,
-    String? createTime,
-    bool? isExample,
-    bool? oversizeFile,
-  }) {
-    return TalkBean(
-      id: id ?? this.id,
-      taskId: taskId ?? this.taskId,
-      ssid: ssid ?? this.ssid,
-      audioUrl: audioUrl ?? this.audioUrl,
-      duration: duration ?? this.duration,
-      characters: characters ?? this.characters,
-      status: status ?? this.status,
-      title: title ?? this.title,
-      summary: summary ?? this.summary,
-      createTime: createTime ?? this.createTime,
-      isExample: isExample ?? this.isExample,
-      oversizeFile: oversizeFile ?? this.oversizeFile,
-    );
+  static _stringFromJson(String? txt) => Rxn(txt);
+
+  static _intFromJson(int? txt) => Rxn(txt);
+
+  void updateBean(TalkBean talkBean) {
+    taskId = talkBean.taskId;
+    ssid = talkBean.ssid;
+    audioUrl = talkBean.audioUrl;
+    duration = talkBean.duration;
+    characters = talkBean.characters;
+    status.value = talkBean.status.value;
+    title.value = talkBean.title.value;
+    summary.value = talkBean.summary.value;
+    createTime = talkBean.createTime;
+    isExample = talkBean.isExample;
+    oversizeFile = talkBean.oversizeFile;
   }
 }
 

+ 4 - 4
lib/data/repositories/agenda_repository.dart

@@ -14,16 +14,16 @@ import '../api/response/agenda_response.dart';
 class AgendaRepository {
   AgendaRepository._();
 
-  final RxList<Rx<Agenda>> _agendaList = <Rx<Agenda>>[].obs;
+  final _agendaList = RxList<Agenda>();
 
-  RxList<Rx<Agenda>> get agendaList => _agendaList;
+  RxList<Agenda> get agendaList => _agendaList;
 
   clearAgendaList() {
     _agendaList.clear();
   }
 
   removeItem(Agenda item) {
-    _agendaList.removeWhere((element) => element.value.id == item.id);
+    _agendaList.removeWhere((element) => element.id == item.id);
   }
 
   Future<AgendaResponse> requestHomeAgendaData(
@@ -40,7 +40,7 @@ class AgendaRepository {
         _agendaList.clear();
       }
       if (response.list != null) {
-        _agendaList.addAll(response.list!.map((e) => Rx<Agenda>(e)).toList());
+        _agendaList.addAll(response.list!);
       }
       return response;
     });

+ 11 - 18
lib/data/repositories/talk_repository.dart

@@ -20,33 +20,21 @@ import '../bean/talks.dart';
 class TalkRepository {
   TalkRepository._();
 
-  final _talkList = RxList<Rx<TalkBean>>();
+  final _talkList = RxList<TalkBean>();
 
-  RxList<Rx<TalkBean>> get talkList => _talkList;
+  RxList<TalkBean> get talkList => _talkList;
 
   void renovateTalkData(TalkBean talkInfo) {
     for (int i = 0; i < _talkList.length; i++) {
-      if (_talkList[i].value.id == talkInfo.id) {
-        _talkList[i].value = talkInfo;
+      if (_talkList[i].id == talkInfo.id) {
+        _talkList[i].updateBean(talkInfo);
         break;
       }
     }
   }
 
-  Rx<TalkBean>? findTalkFromRepository(TalkBean? bean) {
-    if (bean == null) {
-      return null;
-    }
-    for (int i = 0; i < _talkList.length; i++) {
-      if (_talkList[i].value.id == bean.id) {
-        return _talkList[i];
-      }
-    }
-    return null;
-  }
-
   void addNewTalkData(TalkBean talkInfo) {
-    _talkList.insert(0, Rx<TalkBean>(talkInfo));
+    _talkList.insert(0, talkInfo);
   }
 
   clearTalkList() {
@@ -67,8 +55,13 @@ class TalkRepository {
         _talkList.clear();
       }
       if (response.list != null) {
-        _talkList.addAll(response.list!.map((e) => Rx<TalkBean>(e)).toList());
+        _talkList.addAll(response.list!);
       }
+      // TalkBean bean = _talkList[0];
+      // Future.delayed(Duration(seconds: 1),(){
+      //   bean.title.value = '1112312';
+      //   bean.createTime = '222222';
+      // });
       return response;
     });
   }

+ 9 - 7
lib/data/repositories/task_repository.dart

@@ -2,6 +2,7 @@ import 'package:electronic_assistant/base/app_base_request.dart';
 import 'package:electronic_assistant/data/api/atmob_api.dart';
 import 'package:electronic_assistant/data/api/response/talk_query_response.dart';
 import 'package:electronic_assistant/data/bean/talks.dart';
+import 'package:electronic_assistant/data/repositories/agenda_repository.dart';
 import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:electronic_assistant/utils/async_util.dart';
 import 'package:electronic_assistant/utils/cancel_future.dart';
@@ -83,11 +84,11 @@ class TaskRepository {
 
   Future<void> _dealTaskStatus(TalkQueryResponse response) {
     response.talks?.forEach((element) {
-      if (element.status == TalkStatus.analysing ||
-          element.status == TalkStatus.waitAnalysis) {
+      if (element.status.value == TalkStatus.analysing ||
+          element.status.value == TalkStatus.waitAnalysis) {
         talkRepository.renovateTalkData(element);
-      } else if (element.status == TalkStatus.analysisSuccess ||
-          element.status == TalkStatus.analysisFail) {
+      } else if (element.status.value == TalkStatus.analysisSuccess ||
+          element.status.value == TalkStatus.analysisFail) {
         electronicTasks.remove(element.taskId);
         if (!_recordSuccessTalkIds.contains(element.id)) {
           _recordSuccessTalkIds.add(element.id);
@@ -100,12 +101,13 @@ class TaskRepository {
 
   void _notifyGenerationStatus(TalkBean element) {
     talkRepository.renovateTalkData(element);
-    if (element.status == TalkStatus.analysisSuccess) {
+    if (element.status.value == TalkStatus.analysisSuccess) {
       debugPrint('生成成功-${element.id}');
       ToastUtil.showToast('生成成功');
-    } else if (element.status == TalkStatus.analysisFail) {
+      agendaRepository.requestHomeAgendaData();
+    } else if (element.status.value == TalkStatus.analysisFail) {
       debugPrint('生成失败-${element.id}');
-      ToastUtil.showToast('生成失败');
+      // ToastUtil.showToast('生成失败');
     }
   }
 

+ 5 - 5
lib/module/chat/view.dart

@@ -286,7 +286,7 @@ class ChatPage extends BasePage<ChatController> {
       return _buildUserFileChatItem(context, chatItem);
     } else if (chatItem is ReferenceChatItem) {
       return _buildUserNormalChatItem(context, chatItem,
-          referenceTalkTitle: chatItem.talkInfo.title);
+          referenceTalkTitle: chatItem.talkInfo.title.value);
     }
     return _buildUserNormalChatItem(context, chatItem,
         referenceTalkTitle: chatItem.talkTitle);
@@ -386,14 +386,14 @@ class ChatPage extends BasePage<ChatController> {
               child: Column(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
-                  Text(chatItem.talkInfo.title ?? '',
+                  Text(chatItem.talkInfo.title.value.orEmpty,
                       maxLines: 1,
                       style: TextStyle(
                           fontSize: 14.w,
                           color: ColorName.primaryTextColor,
                           fontWeight: FontWeight.bold,
                           overflow: TextOverflow.ellipsis)),
-                  Text(chatItem.talkInfo.summary ?? '',
+                  Text(chatItem.talkInfo.summary.value.orEmpty,
                       maxLines: 1,
                       style: TextStyle(
                           fontSize: 12.w,
@@ -428,7 +428,7 @@ class ChatPage extends BasePage<ChatController> {
         children: [
           Row(
             children: [
-              Text(talkInfo.title ?? '',
+              Text(talkInfo.title.value.orEmpty,
                   style: TextStyle(
                       fontWeight: FontWeight.bold,
                       fontSize: 14.w,
@@ -481,7 +481,7 @@ class ChatPage extends BasePage<ChatController> {
                 width: 16.w,
                 height: 16.w),
           ),
-          Text(talkInfo.title ?? '',
+          Text(talkInfo.title.value.orEmpty,
               overflow: TextOverflow.ellipsis,
               maxLines: 1,
               style: TextStyle(

+ 1 - 1
lib/module/files/controller.dart

@@ -20,7 +20,7 @@ class FilesController extends BaseController {
     onRefreshData();
   }
 
-  RxList<Rx<TalkBean>> get talkList => talkRepository.talkList;
+  RxList<TalkBean> get talkList => talkRepository.talkList;
 
   void requestTalkData({int page = 1}) {
     talkRepository.requestTalkPagePaginate(page, pageSize).then((response) {

+ 1 - 1
lib/module/files/search/controller.dart

@@ -20,7 +20,7 @@ class FileSearchController extends BaseController {
     onRefreshData();
   }
 
-  RxList<Rx<TalkBean>> get talkList => talkRepository.talkList;
+  RxList<TalkBean> get talkList => talkRepository.talkList;
 
   void requestTalkData({int page = 1}) {
     talkRepository.requestTalkPagePaginate(page, pageSize).then((response) {

+ 3 - 3
lib/module/files/search/view.dart

@@ -22,7 +22,7 @@ class FileSearchPage extends BasePage<FileSearchController> {
 
   Widget _buildFileItem(BuildContext context, int index) {
     return Obx(() {
-      TalkBean talkBean = controller.talkList[index].value;
+      TalkBean talkBean = controller.talkList[index];
       return Padding(
           padding: EdgeInsets.only(bottom: 8.w),
           child: GestureDetector(
@@ -55,14 +55,14 @@ class FileSearchPage extends BasePage<FileSearchController> {
                     child: Column(
                       crossAxisAlignment: CrossAxisAlignment.start,
                       children: [
-                        Text(talkBean.title.orEmpty,
+                        Text(talkBean.title.value.orEmpty,
                             maxLines: 1,
                             overflow: TextOverflow.ellipsis,
                             style: TextStyle(
                                 fontSize: 14.sp,
                                 color: ColorName.primaryTextColor,
                                 fontWeight: FontWeight.bold)),
-                        Text(talkBean.summary.orEmpty,
+                        Text(talkBean.summary.value.orEmpty,
                             maxLines: 2,
                             overflow: TextOverflow.ellipsis,
                             style: TextStyle(

+ 8 - 9
lib/module/files/view.dart

@@ -10,7 +10,6 @@ import 'package:electronic_assistant/utils/expand.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
-import 'package:get/get_core/src/get_main.dart';
 import 'package:pull_to_refresh/pull_to_refresh.dart';
 
 import '../../resource/assets.gen.dart';
@@ -163,8 +162,8 @@ class FilesPage extends BasePage<FilesController> {
   }
 
   Widget _buildFileItem(BuildContext context, int index) {
+    TalkBean talkBean = controller.talkList[index];
     return Obx(() {
-      TalkBean talkBean = controller.talkList[index].value;
       return Padding(
           padding: EdgeInsets.only(bottom: 8.w),
           child: GestureDetector(
@@ -181,8 +180,8 @@ class FilesPage extends BasePage<FilesController> {
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
                   Image(
-                      image: (talkBean.status == TalkStatus.analysing ||
-                              talkBean.status == TalkStatus.waitAnalysis)
+                      image: (talkBean.status.value == TalkStatus.analysing ||
+                              talkBean.status.value == TalkStatus.waitAnalysis)
                           ? Assets.images.iconTalkAnalysis.provider()
                           : Assets.images.iconFilesFile.provider(),
                       width: 28.w,
@@ -193,21 +192,21 @@ class FilesPage extends BasePage<FilesController> {
                     child: Column(
                       crossAxisAlignment: CrossAxisAlignment.start,
                       children: [
-                        Text(talkBean.title.orEmpty,
+                        Text(talkBean.title.value.orEmpty,
                             maxLines: 1,
                             overflow: TextOverflow.ellipsis,
                             style: TextStyle(
                                 fontSize: 14.sp,
                                 color: ColorName.primaryTextColor,
                                 fontWeight: FontWeight.bold)),
-                        Text(talkBean.summary.orEmpty,
+                        Text(talkBean.summary.value.orEmpty,
                             maxLines: 2,
                             overflow: TextOverflow.ellipsis,
                             style: TextStyle(
                                 fontSize: 12.sp,
-                                color:
-                                    talkBean.status == TalkStatus.analysisFail
-                                        ? "#F5574E".toColor()
+                                color: talkBean.status.value ==
+                                        TalkStatus.analysisFail
+                                    ? "#F5574E".toColor()
                                         : ColorName.secondaryTextColor)),
                         Container(
                           margin: EdgeInsets.only(top: 6.w),

+ 3 - 7
lib/module/home/controller.dart

@@ -24,9 +24,9 @@ class HomePageController extends BaseController {
 
   BuildContext? todoTargetContext;
 
-  RxList<Rx<TalkBean>> get talkList => talkRepository.talkList;
+  RxList<TalkBean> get talkList => talkRepository.talkList;
 
-  RxList<Rx<Agenda>> get agendaList => agendaRepository.agendaList;
+  RxList<Agenda> get agendaList => agendaRepository.agendaList;
 
   @override
   void onReady() {
@@ -65,11 +65,7 @@ class HomePageController extends BaseController {
 
   void requestName(String? newName, TalkBean bean) {
     talkRepository.talkRename(bean.id, newName).then((data) {
-      bean.title = newName;
-      int index = talkList.indexOf(bean);
-      if (index != -1) {
-        talkList[index].value = bean;
-      }
+      bean.title.value = newName;
       ToastUtil.showToast(StringName.talkRenameSuccess.tr);
     }).catchError((error) {
       ErrorHandler.toastError(error, message: StringName.talkRenameFail.tr);

+ 6 - 6
lib/module/home/view.dart

@@ -250,7 +250,7 @@ class HomePage extends BasePage<HomePageController> {
 
   Widget _builderTalkItem(BuildContext context, int index) {
     return Obx(() {
-      TalkBean? item = controller.talkList[index].value;
+      TalkBean? item = controller.talkList[index];
       return _buildTalkView(item, onLongPressStart: (details) {
         showTalkPopup(details.globalPosition, Alignment.bottomRight,
             onRename: () {
@@ -266,7 +266,7 @@ class HomePage extends BasePage<HomePageController> {
 
   Widget _builderAgendaItem(BuildContext context, int index) {
     return Obx(() {
-      Agenda item = controller.agendaList[index].value;
+      Agenda item = controller.agendaList[index];
       return taskItemView(
         item,
         onThinkingClick: () {
@@ -373,7 +373,7 @@ class HomePage extends BasePage<HomePageController> {
                         )),
                   ),
                   SizedBox(width: 6.w),
-                  Text(item.title.orEmpty,
+                  Text(item.title.value.orEmpty,
                       maxLines: 1,
                       overflow: TextOverflow.ellipsis,
                       style: TextStyle(
@@ -384,7 +384,7 @@ class HomePage extends BasePage<HomePageController> {
               ),
               SizedBox(height: 5.h),
               Text(
-                item.summary.orEmpty,
+                item.summary.value.orEmpty,
                 style: TextStyle(
                     fontSize: 12.sp, color: ColorName.secondaryTextColor),
                 overflow: TextOverflow.ellipsis,
@@ -481,7 +481,7 @@ class HomePage extends BasePage<HomePageController> {
   }
 
   void showRenameTalkDialog(TalkBean item) {
-    reNameDialog(StringName.talkRenameTitle.tr, item.title,
+    reNameDialog(StringName.talkRenameTitle.tr, item.title.value,
         hintTxt: StringName.talkRenameTitleHint.tr,
         maxLength: 15, returnBuilder: (newName) {
       controller.requestName(newName, item);
@@ -489,7 +489,7 @@ class HomePage extends BasePage<HomePageController> {
   }
 
   void showDeleteTalkDialog(TalkBean item) {
-    talkDeleteDialog(item.id, item.title, returnBuilder: () {
+    talkDeleteDialog(item.id, item.title.value, returnBuilder: () {
       controller.requestDelete(item);
     });
   }

+ 3 - 4
lib/module/talk/controller.dart

@@ -273,10 +273,9 @@ class TalkController extends BaseController {
     talkRepository.uploadTalkFile(talkId, duration, file).then((taskId) {
       ToastUtil.showToast('提交成功,小听正在分析谈话,请稍后');
       isUploadedFile = true;
-      talkBean.value = talkBean.value?.copyWith(
-        taskId: taskId,
-        status: TalkStatus.analysing,
-      );
+      TalkBean? bean = talkBean.value;
+      bean?.taskId = talkId;
+      bean?.status.value = TalkStatus.analysing;
       taskRepository.addTask(taskId);
     }).catchError((error) {
       ErrorHandler.toastError(error);

+ 1 - 5
lib/module/talk/original/controller.dart

@@ -19,11 +19,7 @@ class OriginalController extends BaseController {
   void onReady() {
     super.onReady();
     _talkBeanListener = talkController.talkBean.listen((bean) {
-      int? status = bean?.status;
-      if (status == null) {
-        return;
-      }
-      if (status == TalkStatus.analysisSuccess) {
+      if (bean?.status.value == TalkStatus.analysisSuccess) {
         requestOriginal();
       }
     });

+ 1 - 1
lib/module/talk/summary/view.dart

@@ -26,7 +26,7 @@ class SummaryView extends BasePage<SummaryController> {
             EdgeInsets.only(left: 12.w, right: 12.w, top: 16.h, bottom: 20.h),
         child: Obx(() {
           return Text(
-            controller.summaryBean.value?.summary ?? "",
+            controller.summaryBean.value?.summary.value ?? "",
             style:
                 TextStyle(fontSize: 14.sp, color: ColorName.primaryTextColor),
           );

+ 1 - 7
lib/module/talk/todo/controller.dart

@@ -5,9 +5,7 @@ import 'package:electronic_assistant/data/bean/agenda.dart';
 import 'package:electronic_assistant/data/repositories/agenda_repository.dart';
 import 'package:electronic_assistant/module/chat/view.dart';
 import 'package:electronic_assistant/utils/error_handler.dart';
-import 'package:flutter/material.dart';
 import 'package:get/get.dart';
-
 import '../../../data/bean/agenda_list_all_bean.dart';
 import '../../../data/bean/talks.dart';
 import '../controller.dart';
@@ -35,11 +33,7 @@ class TodoController extends BaseController {
   }
 
   void _dealTalkUpdate(TalkBean? bean) {
-    int? status = bean?.status;
-    if (status == null) {
-      return;
-    }
-    if (status == TalkStatus.analysisSuccess) {
+    if (bean?.status.value == TalkStatus.analysisSuccess) {
       _talkController.refreshAgendaAllData();
       requestMineTodoData();
     }

+ 3 - 3
lib/module/talk/view.dart

@@ -53,7 +53,7 @@ class TalkPage extends BasePage<TalkController> {
                       crossAxisAlignment: CrossAxisAlignment.start,
                       children: [
                         SizedBox(height: 8.h),
-                        Text(controller.talkBean.value?.title ?? '',
+                        Text(controller.talkBean.value?.title.value ?? '',
                             style: TextStyle(
                                 fontSize: 22.sp,
                                 fontWeight: FontWeight.bold,
@@ -131,7 +131,7 @@ class TalkPage extends BasePage<TalkController> {
 
   Widget buildTalkContentView() {
     return Obx(() {
-      if (controller.talkBean.value?.status == TalkStatus.notAnalysis) {
+      if (controller.talkBean.value?.status.value == TalkStatus.notAnalysis) {
         if (controller.isShowElectricLow.value) {
           return buildElectricLowView();
         } else {
@@ -248,7 +248,7 @@ class TalkPage extends BasePage<TalkController> {
             children: [
               Obx(() {
                 return Visibility(
-                  visible: controller.talkBean.value?.status ==
+                  visible: controller.talkBean.value?.status.value ==
                       TalkStatus.analysisSuccess,
                   child: GestureDetector(
                     onTap: () {