Przeglądaj źródła

[new]谈话详情增加状态控制显示

zk 1 rok temu
rodzic
commit
869b406422

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

@@ -57,4 +57,7 @@
     <string name="talk_analyse_summary_fail">谈话分析失败,点击去</string>
     <string name="talk_todo_title">待办事项</string>
     <string name="talk_todo_item">项</string>
+    <string name="talk_todo_all">所有待办</string>
+    <string name="talk_todo_set_mine">设为我的</string>
+    <string name="talk_todo_cancel_mine">取消待办</string>
 </resources>

+ 4 - 0
lib/data/api/atmob_api.dart

@@ -4,6 +4,7 @@ import 'package:electronic_assistant/base/base_response.dart';
 import 'package:electronic_assistant/data/api/network_module.dart';
 import 'package:electronic_assistant/data/api/request/agenda_request.dart';
 import 'package:electronic_assistant/data/api/request/agenda_status_request.dart';
+import 'package:electronic_assistant/data/api/request/agenda_todo_request.dart';
 import 'package:electronic_assistant/data/api/request/chat_history_request.dart';
 import 'package:electronic_assistant/data/api/request/login_request.dart';
 import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
@@ -80,6 +81,9 @@ abstract class AtmobApi {
   @POST("/project/secretary/v1/talk/check/electric")
   Future<BaseResponse<TalkCheckElectricResponse>> checkElectric(
       @Body() TalkGenerateRequest request);
+
+  @POST("/project/secretary/v1/agenda/todo")
+  Future<BaseResponse> agendaTodo(@Body() AgendaTodoRequest request);
 }
 
 final atmobApi = AtmobApi(defaultDio, baseUrl: Constants.baseUrl);

+ 18 - 0
lib/data/api/request/agenda_todo_request.dart

@@ -0,0 +1,18 @@
+import 'package:electronic_assistant/base/app_base_request.dart';
+import 'package:json_annotation/json_annotation.dart';
+
+part 'agenda_todo_request.g.dart';
+
+@JsonSerializable()
+class AgendaTodoRequest extends AppBaseRequest {
+  @JsonKey(name: 'id')
+  int? id;
+
+  @JsonKey(name: 'isTodo')
+  bool? isTodo;
+
+  AgendaTodoRequest(this.id, this.isTodo);
+
+  @override
+  Map<String, dynamic> toJson() => _$AgendaTodoRequestToJson(this);
+}

+ 3 - 0
lib/data/bean/agenda.dart

@@ -1,3 +1,4 @@
+import 'package:get/get.dart';
 import 'package:json_annotation/json_annotation.dart';
 
 part 'agenda.g.dart';
@@ -30,6 +31,8 @@ class Agenda {
 
   bool? isDone;
 
+  final RxBool isSetMine = false.obs;
+
   Agenda(
       {this.id,
       this.talkId,

+ 7 - 0
lib/data/repositories/agenda_repository.dart

@@ -4,6 +4,7 @@ import '../../utils/http_handler.dart';
 import '../api/atmob_api.dart';
 import '../api/request/agenda_request.dart';
 import '../api/request/agenda_status_request.dart';
+import '../api/request/agenda_todo_request.dart';
 import '../api/response/agenda_list_all_response.dart';
 import '../api/response/agenda_list_mine_response.dart';
 import '../api/response/agenda_response.dart';
@@ -38,6 +39,12 @@ class AgendaRepository {
         .agendaListMine(TalkRequest(talkId))
         .then(HttpHandler.handle(true));
   }
+
+  Future<void> agendaTodo(int id, bool isTodo) {
+    return atmobApi
+        .agendaTodo(AgendaTodoRequest(id, isTodo))
+        .then(HttpHandler.handle(true));
+  }
 }
 
 final agendaRepository = AgendaRepository._();

+ 91 - 27
lib/module/talk/common_view.dart

@@ -1,6 +1,4 @@
 import 'package:electronic_assistant/data/bean/agenda_list_all_bean.dart';
-import 'package:electronic_assistant/data/bean/talk_info.dart';
-import 'package:electronic_assistant/dialog/rename_dialog.dart';
 import 'package:electronic_assistant/utils/expand.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
@@ -51,7 +49,9 @@ Widget getTalkFailView() {
   );
 }
 
-Widget getTodoItemView(AgendaListAllBean agenda) {
+typedef TodoItemBuilder = List<Widget> Function(List<Agenda>? list);
+
+Widget getTodoItemView(AgendaListAllBean agenda, TodoItemBuilder builder) {
   return Container(
     decoration: BoxDecoration(
       color: ColorName.colorPrimary,
@@ -118,7 +118,7 @@ Widget getTodoItemView(AgendaListAllBean agenda) {
                 SizedBox(width: 12.w),
               ],
             ),
-            children: getTalkAgendaList(agenda.list),
+            children: builder(agenda.list),
           ),
         ),
       );
@@ -126,36 +126,100 @@ Widget getTodoItemView(AgendaListAllBean agenda) {
   );
 }
 
-List<Widget> getTalkAgendaList(List<Agenda>? list) {
+typedef TodoItemClick = void Function(Agenda? agenda);
+
+List<Widget> getTalkAgendaSettingList(List<Agenda>? list,
+    {TodoItemClick? itemClick}) {
   return list?.map((agenda) {
         return Padding(
           padding:
               EdgeInsets.only(left: 12.w, right: 12.w, top: 2.h, bottom: 10.h),
-          child: buildTalkNormalAgendaItem(agenda),
+          child: Row(
+            crossAxisAlignment: CrossAxisAlignment.center,
+            children: [
+              Expanded(
+                child: Row(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      Container(
+                        width: 8.w,
+                        height: 8.w,
+                        margin: EdgeInsets.only(top: 7.h),
+                        decoration: BoxDecoration(
+                          color: ColorName.colorPrimary.withOpacity(0.5),
+                          shape: BoxShape.circle,
+                        ),
+                      ),
+                      SizedBox(width: 4.w),
+                      Expanded(
+                        child: Text(agenda.content.orEmpty,
+                            style: TextStyle(
+                                fontSize: 14.sp,
+                                color: ColorName.primaryTextColor)),
+                      ),
+                    ]),
+              ),
+              SizedBox(width: 20.w),
+              GestureDetector(
+                onTap: () {
+                  itemClick?.call(agenda);
+                },
+                child: Obx(() {
+                  return Container(
+                    decoration: BoxDecoration(
+                      color: agenda.isSetMine.value
+                          ? "#E7E9F6".toColor()
+                          : ColorName.colorPrimary,
+                      borderRadius: BorderRadius.circular(6),
+                    ),
+                    padding:
+                        EdgeInsets.symmetric(horizontal: 9.w, vertical: 5.w),
+                    child: Text(
+                      agenda.isSetMine.value
+                          ? StringName.talkTodoCancelMine.tr
+                          : StringName.talkTodoSetMine.tr,
+                      style: TextStyle(
+                          fontSize: 13.sp,
+                          color: agenda.isSetMine.value
+                              ? ColorName.colorPrimary
+                              : Colors.white),
+                    ),
+                  );
+                }),
+              )
+            ],
+          ),
         );
       }).toList() ??
       [];
 }
 
-Widget buildTalkNormalAgendaItem(Agenda agenda) {
-  return Row(
-    crossAxisAlignment: CrossAxisAlignment.start,
-    children: [
-      Container(
-        width: 8.w,
-        height: 8.w,
-        margin: EdgeInsets.only(top: 7.h),
-        decoration: BoxDecoration(
-          color: ColorName.colorPrimary.withOpacity(0.5),
-          shape: BoxShape.circle,
-        ),
-      ),
-      SizedBox(width: 4.w),
-      Expanded(
-        child: Text(agenda.content.orEmpty,
-            style:
-                TextStyle(fontSize: 14.sp, color: ColorName.primaryTextColor)),
-      )
-    ],
-  );
+List<Widget> getTalkAgendaNormalList(List<Agenda>? list) {
+  return list?.map((agenda) {
+        return Padding(
+          padding:
+              EdgeInsets.only(left: 12.w, right: 12.w, top: 2.h, bottom: 10.h),
+          child: Row(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              Container(
+                width: 8.w,
+                height: 8.w,
+                margin: EdgeInsets.only(top: 7.h),
+                decoration: BoxDecoration(
+                  color: ColorName.colorPrimary.withOpacity(0.5),
+                  shape: BoxShape.circle,
+                ),
+              ),
+              SizedBox(width: 4.w),
+              Expanded(
+                child: Text(agenda.content.orEmpty,
+                    style: TextStyle(
+                        fontSize: 14.sp, color: ColorName.primaryTextColor)),
+              ),
+            ],
+          ),
+        );
+      }).toList() ??
+      [];
 }

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

@@ -1,11 +1,13 @@
 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/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/string.gen.dart';
 import 'package:electronic_assistant/utils/toast_util.dart';
+import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
 import '../../data/bean/agenda_list_all_bean.dart';
 import '../../data/bean/talks.dart';
@@ -15,8 +17,6 @@ import 'original/view.dart';
 class TalkController extends BaseController {
   final talkBean = TalkBean().obs;
 
-  final analyseStatus = TalkStatus.notAnalysis.obs;
-
   // final isOriginalAnalysed = false.obs;
   final isShowElectricLow = false.obs;
 
@@ -45,10 +45,12 @@ class TalkController extends BaseController {
 
   void _initListener() {
     _talkBeanListener = talkBean.listen((bean) {
-      analyseStatus.value = bean.status ?? TalkStatus.notAnalysis;
+      _dealTalkUpdate(bean);
     });
   }
 
+  void _dealTalkUpdate(TalkBean bean) {}
+
   void _getArguments() {
     if (Get.arguments is TalkBean) {
       talkBean.value = Get.arguments as TalkBean;
@@ -84,7 +86,7 @@ class TalkController extends BaseController {
 
   void refreshAgendaAllData() {
     String? id = talkBean.value.id;
-    if (id == null) {
+    if (id == null || agendaAllList.isNotEmpty) {
       return;
     }
     agendaRepository.agendaListAll(id).then((agenda) {

+ 23 - 0
lib/module/talk/original/controller.dart

@@ -1,8 +1,11 @@
+import 'dart:async';
+
 import 'package:electronic_assistant/base/base_controller.dart';
 import 'package:electronic_assistant/data/repositories/talk_repository.dart';
 import 'package:get/get.dart';
 
 import '../../../data/bean/talk_original.dart';
+import '../../../data/bean/talks.dart';
 import '../controller.dart';
 
 class OriginalController extends BaseController {
@@ -10,15 +13,35 @@ class OriginalController extends BaseController {
 
   final originalList = <TalkOriginal>[].obs;
 
+  StreamSubscription? _talkBeanListener;
+
   @override
   void onReady() {
     super.onReady();
+    _talkBeanListener = talkController.talkBean.listen((bean) {
+      int? status = bean.status;
+      if (status == null) {
+        return;
+      }
+      if (status == TalkStatus.analysisSuccess) {
+        requestOriginal();
+      }
+    });
     requestOriginal();
   }
 
   void requestOriginal() {
+    if (originalList.isNotEmpty) {
+      return;
+    }
     talkRepository.talkOriginal(talkController.talkBean.value.id).then((value) {
       originalList.value = value;
     });
   }
+
+  @override
+  void onClose() {
+    super.onClose();
+    _talkBeanListener?.cancel();
+  }
 }

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

@@ -1,9 +1,9 @@
+import 'dart:async';
+
 import 'package:electronic_assistant/base/base_controller.dart';
+import 'package:electronic_assistant/data/bean/talks.dart';
 import 'package:electronic_assistant/data/repositories/talk_repository.dart';
-import 'package:electronic_assistant/utils/error_handler.dart';
 import 'package:get/get.dart';
-
-import '../../../data/bean/agenda.dart';
 import '../../../data/bean/agenda_list_all_bean.dart';
 import '../../../data/bean/talk_info.dart';
 import '../controller.dart';
@@ -11,13 +11,22 @@ import '../controller.dart';
 class SummaryController extends BaseController {
   final TalkController talkController = Get.find();
 
-  final talkInfo = TalkInfo().obs;
+  final summaryBean = TalkInfo().obs;
+
+  StreamSubscription? _talkBeanListener;
 
   RxList<AgendaListAllBean> get agendaAllList => talkController.agendaAllList;
 
   @override
   void onReady() {
     super.onReady();
+    _talkBeanListener = talkController.talkBean.listen((bean) {
+      _dealTalkUpdate(bean);
+    });
+    _dealTalkUpdate(talkController.talkBean.value);
+  }
+
+  void _dealTalkUpdate(TalkBean bean) {
     refreshSummaryData();
   }
 
@@ -28,9 +37,15 @@ class SummaryController extends BaseController {
     }
     talkRepository.talkInfo(id).then((data) {
       if (data.talkInfo != null) {
-        talkInfo.value = data.talkInfo!;
+        summaryBean.value = data.talkInfo!;
       }
     });
     talkController.refreshAgendaAllData();
   }
+
+  @override
+  void onClose() {
+    super.onClose();
+    _talkBeanListener?.cancel();
+  }
 }

+ 28 - 16
lib/module/talk/summary/view.dart

@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
+import '../../../data/bean/talks.dart';
 import '../common_view.dart';
 import 'controller.dart';
 
@@ -14,16 +15,9 @@ class SummaryView extends BasePage<SummaryController> {
 
   @override
   Widget buildBody(BuildContext context) {
-    return ListView(children: [
-      // buildTemplateView(),
-      buildSummaryView(),
-      Container(
-        height: 6.h,
-        color: "#F6F6F6".toColor(),
-      ),
-      buildAllTaskView(),
-      buildPerchView()
-    ]);
+    return Obx(() {
+      return buildSummaryStatusView();
+    });
   }
 
   Widget buildSummaryView() {
@@ -32,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.talkInfo.value.summary.orEmpty,
+            controller.summaryBean.value.summary.orEmpty,
             style:
                 TextStyle(fontSize: 14.sp, color: ColorName.primaryTextColor),
           );
@@ -67,14 +61,32 @@ class SummaryView extends BasePage<SummaryController> {
       return Column(
           children: controller.agendaAllList.map((agenda) {
         return Padding(
-          padding: EdgeInsets.only(bottom: 8.h),
-          child: getTodoItemView(agenda),
-        );
+            padding: EdgeInsets.only(bottom: 8.h),
+            child: getTodoItemView(
+                agenda, (list) => getTalkAgendaNormalList(list)));
       }).toList());
     });
   }
 
-  Widget buildPerchView() {
-    return SizedBox(height: 150.h);
+  Widget buildSummaryStatusView() {
+    if (controller.summaryBean.value.status == TalkStatus.analysisFail) {
+      return getTalkFailView();
+    } else if (controller.summaryBean.value.status ==
+        TalkStatus.analysisSuccess) {
+      return ListView(padding: EdgeInsets.only(bottom: 150.h), children: [
+        // buildTemplateView(),
+        buildSummaryView(),
+        Container(
+          height: 6.h,
+          color: "#F6F6F6".toColor(),
+        ),
+        buildAllTaskView(),
+      ]);
+    } else if (controller.summaryBean.value.status == TalkStatus.analysing ||
+        controller.summaryBean.value.status == TalkStatus.waitAnalysis) {
+      return getTalkLoadingView();
+    } else {
+      return Container();
+    }
   }
 }

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

@@ -1,4 +1,78 @@
+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/utils/error_handler.dart';
 import 'package:get/get.dart';
 
-class TodoController extends BaseController {}
+import '../../../data/bean/agenda_list_all_bean.dart';
+import '../../../data/bean/talks.dart';
+import '../controller.dart';
+
+class TodoController extends BaseController {
+  final TalkController _talkController = Get.find();
+
+  StreamSubscription? _talkBeanListener;
+
+  final agendaMineList = <Agenda>[].obs;
+
+  final mineAgendaIsExpanded = false.obs;
+
+  RxList<AgendaListAllBean> get agendaAllList => _talkController.agendaAllList;
+
+  Rx<TalkBean> get talkBean => _talkController.talkBean;
+
+  @override
+  void onReady() {
+    super.onReady();
+    _talkBeanListener = _talkController.talkBean.listen((bean) {
+      _dealTalkUpdate(bean);
+    });
+    _dealTalkUpdate(_talkController.talkBean.value);
+  }
+
+  void _dealTalkUpdate(TalkBean bean) {
+    int? status = bean.status;
+    if (status == null) {
+      return;
+    }
+    if (status == TalkStatus.analysisSuccess) {
+      _talkController.refreshAgendaAllData();
+      requestMineTodoData();
+    }
+  }
+
+  void requestMineTodoData() {
+    String? id = _talkController.talkBean.value.id;
+    if (id == null) {
+      return;
+    }
+    agendaRepository.agendaListMine(id).then((data) {
+      agendaMineList.value = data.list ?? [];
+    });
+  }
+
+  @override
+  void onClose() {
+    super.onClose();
+    _talkBeanListener?.cancel();
+  }
+
+  void agendaTodo(Agenda? agenda) {
+    if (agenda == null || agenda.id == null) {
+      return;
+    }
+    bool isSetTodo = !agenda.isSetMine.value;
+    agendaRepository.agendaTodo(agenda.id!, isSetTodo).then((value) {
+      agenda.isSetMine.value = isSetTodo;
+      requestMineTodoData();
+    }).catchError((error) {
+      ErrorHandler.toastError(error);
+    });
+  }
+
+  void onClickThinking(Agenda agenda) {
+    //TODO 跳转至小听聊天界面
+  }
+}

+ 165 - 1
lib/module/talk/todo/view.dart

@@ -1,6 +1,19 @@
+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';
 
+import '../../../data/bean/agenda.dart';
+import '../../../data/bean/talks.dart';
+import '../../../resource/assets.gen.dart';
+import '../../../utils/common_style.dart';
+import '../common_view.dart';
 import 'controller.dart';
 
 class TodoView extends BasePage<TodoController> {
@@ -8,8 +21,159 @@ class TodoView extends BasePage<TodoController> {
 
   @override
   Widget buildBody(BuildContext context) {
+    return Obx(() {
+      return _buildTodoStatusView();
+    });
+  }
+
+  _buildAllTaskView() {
+    return Padding(
+      padding: EdgeInsets.only(top: 6.h, bottom: 16.h),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Text(StringName.talkTodoAll.tr,
+              style: TextStyle(
+                  fontSize: 14.sp, color: ColorName.secondaryTextColor)),
+          SizedBox(height: 12.h),
+          buildAllTodoView(),
+        ],
+      ),
+    );
+  }
+
+  Widget buildAllTodoView() {
+    return Obx(() {
+      return Column(
+          children: controller.agendaAllList.map((agenda) {
+        return Padding(
+          padding: EdgeInsets.only(bottom: 8.h),
+          child: getTodoItemView(
+              agenda,
+              (list) => getTalkAgendaSettingList(list, itemClick: (agenda) {
+                    controller.agendaTodo(agenda);
+                  })),
+        );
+      }).toList());
+    });
+  }
+
+  Widget _buildMineTodoList() {
+    return Builder(builder: (context) {
+      return Theme(
+        data: Theme.of(context).copyWith(
+          splashFactory: NoSplash.splashFactory,
+        ),
+        child: Obx(() {
+          return ExpansionTile(
+            onExpansionChanged: (value) {
+              controller.mineAgendaIsExpanded.value = value;
+            },
+            shape: RoundedRectangleBorder(
+              borderRadius: BorderRadius.circular(4.0),
+              side: const BorderSide(color: Colors.transparent),
+            ),
+            collapsedShape: RoundedRectangleBorder(
+              borderRadius: BorderRadius.circular(4.0),
+              side: const BorderSide(color: Colors.transparent),
+            ),
+            minTileHeight: 46.h,
+            showTrailingIcon: false,
+            childrenPadding: EdgeInsets.zero,
+            tilePadding: EdgeInsets.zero,
+            title: Row(
+              children: [
+                Text(StringName.talkTabMyTask.tr,
+                    style: TextStyle(
+                        fontSize: 14.sp, color: ColorName.secondaryTextColor)),
+                const Spacer(),
+                Obx(() {
+                  return Row(
+                    children: [
+                      Text(
+                        '${controller.agendaMineList.length}${StringName.talkTodoItem.tr}',
+                        style: TextStyle(
+                            fontSize: 15.sp,
+                            color: ColorName.secondaryTextColor),
+                      ),
+                      SizedBox(width: 3.w),
+                      SizedBox(
+                          width: 16.w,
+                          height: 16.w,
+                          child: controller.mineAgendaIsExpanded.value
+                              ? Assets.images.iconTalkExpand.image()
+                              : Assets.images.iconTalkCollapse.image()),
+                    ],
+                  );
+                }),
+                SizedBox(width: 12.w),
+              ],
+            ),
+            children: controller.agendaMineList.map((agenda) {
+              return _buildMineItem(agenda);
+            }).toList(),
+          );
+        }),
+      );
+    });
+  }
+
+  Widget _buildMineItem(Agenda agenda) {
     return Container(
-      child: Text('todo页面'),
+      margin: EdgeInsets.only(bottom: 8.w),
+      decoration: BoxDecoration(
+        borderRadius: BorderRadius.circular(8.0),
+        border: Border.all(
+          color: '#F6F6F6'.toColor(),
+          width: 2,
+        ),
+      ),
+      padding: EdgeInsets.symmetric(vertical: 17.w, horizontal: 12.w),
+      child: Row(
+        children: [
+          Expanded(
+            child: Padding(
+              padding: const EdgeInsets.only(right: 12).w,
+              child: Text(agenda.content ?? '',
+                  maxLines: 1,
+                  overflow: TextOverflow.ellipsis,
+                  style: TextStyle(
+                      fontSize: 15.sp,
+                      fontWeight: FontWeight.bold,
+                      color: ColorName.primaryTextColor)),
+            ),
+          ),
+          GestureDetector(
+            onTap: () {
+              controller.onClickThinking(agenda);
+            },
+            child: Container(
+              decoration: getPrimaryBtnDecoration(6),
+              padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 4).w,
+              child: Text(
+                StringName.homeTalkThinking.tr,
+                style: TextStyle(fontSize: 13.sp, color: ColorName.white),
+              ),
+            ),
+          )
+        ],
+      ),
     );
   }
+
+  Widget _buildTodoStatusView() {
+    if (controller.talkBean.value.status == TalkStatus.analysisFail) {
+      return getTalkFailView();
+    } else if (controller.talkBean.value.status == TalkStatus.analysing ||
+        controller.talkBean.value.status == TalkStatus.waitAnalysis) {
+      return getTalkLoadingView();
+    } else if (controller.talkBean.value.status == TalkStatus.analysisSuccess) {
+      return ListView(
+        padding: EdgeInsets.only(left: 12.w, right: 12.w),
+        children: [_buildMineTodoList(), _buildAllTaskView()],
+      );
+    } else {
+      return Container();
+    }
+  }
 }

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

@@ -131,7 +131,7 @@ class TalkPage extends BasePage<TalkController> {
 
   Widget buildTalkContentView() {
     return Obx(() {
-      if (controller.analyseStatus.value == TalkStatus.notAnalysis) {
+      if (controller.talkBean.value.status == TalkStatus.notAnalysis) {
         if (controller.isShowElectricLow.value) {
           return buildElectricLowView();
         } else {

+ 2 - 0
lib/router/app_pages.dart

@@ -1,6 +1,7 @@
 import 'package:electronic_assistant/module/main/controller.dart';
 import 'package:electronic_assistant/module/talk/controller.dart';
 import 'package:electronic_assistant/module/talk/summary/controller.dart';
+import 'package:electronic_assistant/module/talk/todo/controller.dart';
 import 'package:electronic_assistant/module/talk/view.dart';
 import 'package:electronic_assistant/module/record/controller.dart';
 import 'package:electronic_assistant/module/task/search/task_search.dart';
@@ -60,6 +61,7 @@ class AppBinding extends Bindings {
     lazyPut(() => RecordController());
     lazyPut(() => OriginalController());
     lazyPut(() => SummaryController());
+    lazyPut(() => TodoController());
   }
 
   void lazyPut<S>(InstanceBuilderCallback<S> builder) {

+ 3 - 0
lib/utils/common_utils.dart

@@ -0,0 +1,3 @@
+bool getBoolValue(bool? value) {
+  return value ?? false;
+}