Browse Source

[modify]统一talkBean

zk 1 year ago
parent
commit
b2cc4402b1

+ 2 - 2
lib/data/api/response/talk_info_response.dart

@@ -1,6 +1,6 @@
-import 'package:electronic_assistant/data/bean/talk_info.dart';
 import 'package:json_annotation/json_annotation.dart';
 
+import '../../bean/talks.dart';
 import '../../bean/template_bean.dart';
 
 part 'talk_info_response.g.dart';
@@ -8,7 +8,7 @@ part 'talk_info_response.g.dart';
 @JsonSerializable()
 class TalkInfoResponse {
   @JsonKey(name: 'talkInfo')
-  TalkInfo? talkInfo;
+  TalkBean? talkInfo;
 
   @JsonKey(name: 'templates')
   List<TemplateBean>? templateList;

+ 2 - 2
lib/data/bean/file_chat_item.dart

@@ -1,8 +1,8 @@
 import 'package:electronic_assistant/data/bean/chat_item.dart';
-import 'package:electronic_assistant/data/bean/talk_info.dart';
+import 'package:electronic_assistant/data/bean/talks.dart';
 
 class FileChatItem extends ChatItem {
-  final TalkInfo talkInfo;
+  final TalkBean talkInfo;
 
   FileChatItem(this.talkInfo,
       {required super.id,

+ 2 - 2
lib/data/bean/reference_chat_item.dart

@@ -1,8 +1,8 @@
 import 'package:electronic_assistant/data/bean/chat_item.dart';
-import 'package:electronic_assistant/data/bean/talk_info.dart';
+import 'package:electronic_assistant/data/bean/talks.dart';
 
 class ReferenceChatItem extends ChatItem {
-  final TalkInfo talkInfo;
+  final TalkBean talkInfo;
 
   ReferenceChatItem(
       {required this.talkInfo,

+ 0 - 55
lib/data/bean/talk_info.dart

@@ -1,55 +0,0 @@
-import 'package:json_annotation/json_annotation.dart';
-
-part 'talk_info.g.dart';
-
-@JsonSerializable()
-class TalkInfo {
-  @JsonKey(name: 'id')
-  String? id;
-
-  @JsonKey(name: 'taskId')
-  String? taskId;
-
-  @JsonKey(name: 'ssid')
-  String? ssid;
-
-  @JsonKey(name: 'audioUrl')
-  String? audioUrl;
-
-  @JsonKey(name: 'duration')
-  double? duration;
-
-  @JsonKey(name: 'status')
-  int? status;
-
-  @JsonKey(name: 'title')
-  String? title;
-
-  @JsonKey(name: 'summary')
-  String? summary;
-
-  @JsonKey(name: 'createTime')
-  String? createTime;
-
-  @JsonKey(name: 'example')
-  bool? example;
-
-  @JsonKey(name: 'oversizeFile')
-  bool? oversizeFile;
-
-  TalkInfo(
-      {this.id,
-      this.taskId,
-      this.ssid,
-      this.audioUrl,
-      this.duration,
-      this.status,
-      this.title,
-      this.summary,
-      this.createTime,
-      this.example,
-      this.oversizeFile});
-
-  factory TalkInfo.fromJson(Map<String, dynamic> json) =>
-      _$TalkInfoFromJson(json);
-}

+ 5 - 1
lib/data/bean/talks.dart

@@ -37,6 +37,9 @@ class TalkBean {
   @JsonKey(name: 'example')
   bool? isExample;
 
+  @JsonKey(name: 'oversizeFile')
+  bool? oversizeFile;
+
   TalkBean(
       {required this.id,
       this.taskId,
@@ -48,7 +51,8 @@ class TalkBean {
       this.title,
       this.summary,
       this.createTime,
-      this.isExample});
+      this.isExample,
+      this.oversizeFile});
 
   factory TalkBean.fromJson(Map<String, dynamic> json) =>
       _$TalkBeanFromJson(json);

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

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

+ 17 - 5
lib/data/repositories/talk_repository.dart

@@ -20,21 +20,33 @@ import '../bean/talks.dart';
 class TalkRepository {
   TalkRepository._();
 
-  final RxList<Rxn<TalkBean>> _talkList = <Rxn<TalkBean>>[].obs;
+  final _talkList = RxList<Rx<TalkBean>>();
 
-  RxList<Rxn<TalkBean>> get talkList => _talkList;
+  RxList<Rx<TalkBean>> get talkList => _talkList;
 
   void renovateTalkData(TalkBean talkInfo) {
     for (int i = 0; i < _talkList.length; i++) {
-      if (_talkList[i].value?.id == talkInfo.id) {
+      if (_talkList[i].value.id == talkInfo.id) {
         _talkList[i].value = 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, Rxn<TalkBean>(talkInfo));
+    _talkList.insert(0, Rx<TalkBean>(talkInfo));
   }
 
   clearTalkList() {
@@ -55,7 +67,7 @@ class TalkRepository {
         _talkList.clear();
       }
       if (response.list != null) {
-        _talkList.addAll(response.list!.map((e) => Rxn<TalkBean>(e)).toList());
+        _talkList.addAll(response.list!.map((e) => Rx<TalkBean>(e)).toList());
       }
       return response;
     });

+ 3 - 3
lib/module/chat/controller.dart

@@ -7,7 +7,6 @@ import 'package:electronic_assistant/data/bean/file_chat_item.dart';
 import 'package:electronic_assistant/data/bean/progressing_chat_item.dart';
 import 'package:electronic_assistant/data/bean/reference_chat_item.dart';
 import 'package:electronic_assistant/data/bean/stream_chat_origin_data.dart';
-import 'package:electronic_assistant/data/bean/talk_info.dart';
 import 'package:electronic_assistant/data/repositories/chat_repository.dart';
 import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:electronic_assistant/module/chat/start/view.dart';
@@ -17,6 +16,7 @@ import 'package:get/get.dart';
 import 'package:pull_to_refresh/pull_to_refresh.dart';
 import 'package:uuid/uuid.dart';
 
+import '../../data/bean/talks.dart';
 import '../../utils/http_handler.dart';
 
 class ChatController extends BaseController {
@@ -26,7 +26,7 @@ class ChatController extends BaseController {
   final TextEditingController inputController = TextEditingController();
 
   final RxList chatItems = [].obs;
-  final Rxn<TalkInfo> talkInfo = Rxn<TalkInfo>();
+  final Rxn<TalkBean> talkInfo = Rxn<TalkBean>();
   final Rxn<Agenda> agenda = Rxn<Agenda>();
 
   var isOpenStart = false;
@@ -43,7 +43,7 @@ class ChatController extends BaseController {
     if (arguments.isEmpty) {
       return;
     }
-    if (arguments[0] is TalkInfo) {
+    if (arguments[0] is TalkBean) {
       talkInfo.value = arguments[0];
       sendInitialMessage();
     } else if (arguments[0] is String) {

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

@@ -15,7 +15,7 @@ import 'package:lottie/lottie.dart';
 import 'package:pull_to_refresh/pull_to_refresh.dart';
 
 import '../../data/bean/progressing_chat_item.dart';
-import '../../data/bean/talk_info.dart';
+import '../../data/bean/talks.dart';
 import '../../resource/assets.gen.dart';
 import '../../router/app_pages.dart';
 
@@ -26,7 +26,7 @@ class ChatPage extends BasePage<ChatController> {
     Get.toNamed(RoutePath.chat);
   }
 
-  static startByTalk(TalkInfo talkInfo, {Agenda? agenda}) {
+  static startByTalk(TalkBean talkInfo, {Agenda? agenda}) {
     Get.toNamed(RoutePath.chat, arguments: [talkInfo, agenda]);
   }
 
@@ -157,7 +157,7 @@ class ChatPage extends BasePage<ChatController> {
             child: Column(
               children: [
                 Obx(() {
-                  TalkInfo? talkInfo = controller.talkInfo.value;
+                  TalkBean? talkInfo = controller.talkInfo.value;
                   if (talkInfo == null) {
                     return Container();
                   } else {
@@ -404,7 +404,7 @@ class ChatPage extends BasePage<ChatController> {
     );
   }
 
-  _buildReferenceFile(TalkInfo talkInfo) {
+  _buildReferenceFile(TalkBean talkInfo) {
     if (talkInfo.oversizeFile == true) {
       return _buildOverSizeReference(talkInfo);
     } else {
@@ -412,7 +412,7 @@ class ChatPage extends BasePage<ChatController> {
     }
   }
 
-  Container _buildOverSizeReference(TalkInfo talkInfo) {
+  Container _buildOverSizeReference(TalkBean talkInfo) {
     return Container(
       margin: EdgeInsets.only(bottom: 14.h),
       padding: EdgeInsets.only(left: 8.w, top: 8.h, right: 10.w, bottom: 8.h),
@@ -461,7 +461,7 @@ class ChatPage extends BasePage<ChatController> {
     );
   }
 
-  _buildNormalReference(TalkInfo talkInfo) {
+  _buildNormalReference(TalkBean talkInfo) {
     return Container(
       margin: EdgeInsets.only(bottom: 14.h),
       child: Row(

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

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

+ 1 - 4
lib/module/files/view.dart

@@ -164,10 +164,7 @@ class FilesPage extends BasePage<FilesController> {
 
   Widget _buildFileItem(BuildContext context, int index) {
     return Obx(() {
-      TalkBean? talkBean = controller.talkList[index].value;
-      if (talkBean == null) {
-        return Container();
-      }
+      TalkBean talkBean = controller.talkList[index].value;
       return Padding(
           padding: EdgeInsets.only(bottom: 8.w),
           child: GestureDetector(

+ 2 - 2
lib/module/home/controller.dart

@@ -24,9 +24,9 @@ class HomePageController extends BaseController {
 
   BuildContext? todoTargetContext;
 
-  RxList<Rxn<TalkBean>> get talkList => talkRepository.talkList;
+  RxList<Rx<TalkBean>> get talkList => talkRepository.talkList;
 
-  RxList<Rxn<Agenda>> get agendaList => agendaRepository.agendaList;
+  RxList<Rx<Agenda>> get agendaList => agendaRepository.agendaList;
 
   @override
   void onReady() {

+ 4 - 25
lib/module/home/view.dart

@@ -251,9 +251,6 @@ class HomePage extends BasePage<HomePageController> {
   Widget _builderTalkItem(BuildContext context, int index) {
     return Obx(() {
       TalkBean? item = controller.talkList[index].value;
-      if (item == null) {
-        return Container();
-      }
       return _buildTalkView(item, onLongPressStart: (details) {
         showTalkPopup(details.globalPosition, Alignment.bottomRight,
             onRename: () {
@@ -269,12 +266,12 @@ class HomePage extends BasePage<HomePageController> {
 
   Widget _builderAgendaItem(BuildContext context, int index) {
     return Obx(() {
-      Agenda? item = controller.agendaList[index].value;
-      if (item == null) {
-        return Container();
-      }
+      Agenda item = controller.agendaList[index].value;
       return taskItemView(
         item,
+        onThinkingClick: () {
+          ChatPage.startByTalkId(item.talkId, agenda: item);
+        },
         onCheckClick: () {
           controller.agendaComplete(item);
         },
@@ -339,23 +336,6 @@ class HomePage extends BasePage<HomePageController> {
     ));
   }
 
-  Widget _buildInsertTalkItem(BuildContext context, int index,
-      Animation<double> animation, TalkBean item) {
-    return FadeTransition(
-      opacity: animation,
-      child: _buildTalkView(item, onLongPressStart: (details) {
-        showTalkPopup(details.globalPosition, Alignment.bottomRight,
-            onRename: () {
-          showRenameTalkDialog(item);
-        }, onDelete: () {
-          showDeleteTalkDialog(item);
-        });
-      }, onItemClick: () {
-        TalkPage.start(item);
-      }),
-    );
-  }
-
   Widget _buildTalkView(TalkBean item,
       {VoidCallback? onItemClick,
       GestureLongPressStartCallback? onLongPressStart}) {
@@ -431,7 +411,6 @@ class HomePage extends BasePage<HomePageController> {
     );
   }
 
-
   Widget buildTitle(String titleName, VoidCallback? onTap) {
     return Padding(
       padding: const EdgeInsets.symmetric(horizontal: 12).w,

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

@@ -3,6 +3,7 @@ import 'dart:io';
 
 import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/data/repositories/task_repository.dart';
+import 'package:electronic_assistant/module/chat/view.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';
@@ -296,6 +297,12 @@ class TalkController extends BaseController {
     });
   }
 
+  void clickAIAnalysis() {
+    if (talkBean.value != null) {
+      ChatPage.startByTalk(talkBean.value!);
+    }
+  }
+
   @override
   void onClose() {
     super.onClose();

+ 2 - 5
lib/module/talk/summary/controller.dart

@@ -5,13 +5,12 @@ import 'package:electronic_assistant/data/bean/talks.dart';
 import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:get/get.dart';
 import '../../../data/bean/agenda_list_all_bean.dart';
-import '../../../data/bean/talk_info.dart';
 import '../controller.dart';
 
 class SummaryController extends BaseController {
   final TalkController talkController = Get.find();
 
-  final summaryBean = TalkInfo().obs;
+  final Rxn<TalkBean> summaryBean = Rxn();
 
   StreamSubscription? _talkBeanListener;
 
@@ -36,9 +35,7 @@ class SummaryController extends BaseController {
       return;
     }
     talkRepository.talkInfo(id).then((data) {
-      if (data.talkInfo != null) {
-        summaryBean.value = data.talkInfo!;
-      }
+      summaryBean.value = data.talkInfo;
     });
     talkController.refreshAgendaAllData();
   }

+ 5 - 5
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.orEmpty,
+            controller.summaryBean.value?.summary ?? "",
             style:
                 TextStyle(fontSize: 14.sp, color: ColorName.primaryTextColor),
           );
@@ -69,9 +69,9 @@ class SummaryView extends BasePage<SummaryController> {
   }
 
   Widget buildSummaryStatusView() {
-    if (controller.summaryBean.value.status == TalkStatus.analysisFail) {
+    if (controller.summaryBean.value?.status == TalkStatus.analysisFail) {
       return getTalkFailView();
-    } else if (controller.summaryBean.value.status ==
+    } else if (controller.summaryBean.value?.status ==
         TalkStatus.analysisSuccess) {
       return ListView(padding: EdgeInsets.only(bottom: 150.h), children: [
         // buildTemplateView(),
@@ -82,8 +82,8 @@ class SummaryView extends BasePage<SummaryController> {
         ),
         buildAllTaskView(),
       ]);
-    } else if (controller.summaryBean.value.status == TalkStatus.analysing ||
-        controller.summaryBean.value.status == TalkStatus.waitAnalysis) {
+    } else if (controller.summaryBean.value?.status == TalkStatus.analysing ||
+        controller.summaryBean.value?.status == TalkStatus.waitAnalysis) {
       return getTalkLoadingView();
     } else {
       return Container();

+ 8 - 3
lib/module/talk/todo/controller.dart

@@ -3,8 +3,8 @@ import 'dart:async';
 import 'package:electronic_assistant/base/base_controller.dart';
 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/cupertino.dart';
 import 'package:get/get.dart';
 
 import '../../../data/bean/agenda_list_all_bean.dart';
@@ -61,7 +61,7 @@ class TodoController extends BaseController {
   }
 
   void agendaTodo(Agenda? agenda) {
-    if (agenda == null || agenda.id == null) {
+    if (agenda == null) {
       return;
     }
     bool isSetTodo = !agenda.todo.value;
@@ -74,6 +74,11 @@ class TodoController extends BaseController {
   }
 
   void onClickThinking(Agenda agenda) {
-    //TODO 跳转至小听聊天界面
+    TalkBean? bean = talkBean.value;
+    if (bean != null) {
+      ChatPage.startByTalk(bean, agenda: agenda);
+    } else {
+      ChatPage.start();
+    }
   }
 }

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

@@ -1,10 +1,7 @@
-import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/base/base_page.dart';
-import 'package:electronic_assistant/dialog/rename_dialog.dart';
 import 'package:electronic_assistant/resource/colors.gen.dart';
 import 'package:electronic_assistant/resource/string.gen.dart';
 import 'package:electronic_assistant/utils/expand.dart';
-import 'package:electronic_assistant/utils/toast_util.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';

+ 16 - 5
lib/module/talk/view.dart

@@ -246,11 +246,22 @@ class TalkPage extends BasePage<TalkController> {
           child: Column(
             crossAxisAlignment: CrossAxisAlignment.end,
             children: [
-              Container(
-                  margin: EdgeInsets.only(right: 8.w),
-                  width: 64.w,
-                  height: 64.w,
-                  child: Assets.images.iconTalkLogo.image()),
+              Obx(() {
+                return Visibility(
+                  visible: controller.talkBean.value?.status ==
+                      TalkStatus.analysisSuccess,
+                  child: GestureDetector(
+                    onTap: () {
+                      controller.clickAIAnalysis();
+                    },
+                    child: Container(
+                        margin: EdgeInsets.only(right: 8.w),
+                        width: 64.w,
+                        height: 64.w,
+                        child: Assets.images.iconTalkLogo.image()),
+                  ),
+                );
+              }),
               SizedBox(height: 24.h),
               buildAudioView()
             ],