view.dart 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import 'package:electronic_assistant/base/base_page.dart';
  2. import 'package:electronic_assistant/resource/colors.gen.dart';
  3. import 'package:electronic_assistant/resource/string.gen.dart';
  4. import 'package:electronic_assistant/utils/expand.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter_screenutil/flutter_screenutil.dart';
  7. import 'package:get/get.dart';
  8. import '../../../data/bean/agenda.dart';
  9. import '../../../data/bean/talks.dart';
  10. import '../../../resource/assets.gen.dart';
  11. import '../../../utils/common_style.dart';
  12. import '../common_view.dart';
  13. import 'controller.dart';
  14. class TodoView extends BasePage<TodoController> {
  15. const TodoView({super.key});
  16. @override
  17. Widget buildBody(BuildContext context) {
  18. return Obx(() {
  19. return _buildTodoStatusView();
  20. });
  21. }
  22. _buildAllTaskView() {
  23. return Padding(
  24. padding: EdgeInsets.only(top: 6.h, bottom: 16.h),
  25. child: Column(
  26. crossAxisAlignment: CrossAxisAlignment.start,
  27. children: [
  28. Text(StringName.talkTodoAll.tr,
  29. style: TextStyle(
  30. fontSize: 14.sp, color: ColorName.secondaryTextColor)),
  31. SizedBox(height: 12.h),
  32. buildAllTodoView(),
  33. ],
  34. ),
  35. );
  36. }
  37. Widget buildAllTodoView() {
  38. return Obx(() {
  39. return Column(
  40. children: controller.agendaAllList.map((agenda) {
  41. return Padding(
  42. padding: EdgeInsets.only(bottom: 8.h),
  43. child: getTodoItemView(
  44. agenda,
  45. (list) => getTalkAgendaSettingList(list, itemClick: (agenda) {
  46. controller.agendaTodo(agenda);
  47. })),
  48. );
  49. }).toList());
  50. });
  51. }
  52. Widget _buildMineTodoList() {
  53. return Builder(builder: (context) {
  54. return Theme(
  55. data: Theme.of(context).copyWith(
  56. splashFactory: NoSplash.splashFactory,
  57. ),
  58. child: Obx(() {
  59. return ExpansionTile(
  60. onExpansionChanged: (value) {
  61. controller.mineAgendaIsExpanded.value = value;
  62. },
  63. shape: RoundedRectangleBorder(
  64. borderRadius: BorderRadius.circular(4.0),
  65. side: const BorderSide(color: Colors.transparent),
  66. ),
  67. collapsedShape: RoundedRectangleBorder(
  68. borderRadius: BorderRadius.circular(4.0),
  69. side: const BorderSide(color: Colors.transparent),
  70. ),
  71. minTileHeight: 46.h,
  72. showTrailingIcon: false,
  73. childrenPadding: EdgeInsets.zero,
  74. tilePadding: EdgeInsets.zero,
  75. title: Row(
  76. children: [
  77. Text(StringName.talkTabMyTask.tr,
  78. style: TextStyle(
  79. fontSize: 14.sp, color: ColorName.secondaryTextColor)),
  80. const Spacer(),
  81. Obx(() {
  82. return Row(
  83. children: [
  84. Text(
  85. '${controller.agendaMineList.length}${StringName.talkTodoItem.tr}',
  86. style: TextStyle(
  87. fontSize: 15.sp,
  88. color: ColorName.secondaryTextColor),
  89. ),
  90. SizedBox(width: 3.w),
  91. SizedBox(
  92. width: 16.w,
  93. height: 16.w,
  94. child: controller.mineAgendaIsExpanded.value
  95. ? Assets.images.iconTalkExpand.image()
  96. : Assets.images.iconTalkCollapse.image()),
  97. ],
  98. );
  99. }),
  100. SizedBox(width: 12.w),
  101. ],
  102. ),
  103. children: controller.agendaMineList.map((agenda) {
  104. return _buildMineItem(agenda);
  105. }).toList(),
  106. );
  107. }),
  108. );
  109. });
  110. }
  111. Widget _buildMineItem(Agenda agenda) {
  112. return Container(
  113. margin: EdgeInsets.only(bottom: 8.w),
  114. decoration: BoxDecoration(
  115. borderRadius: BorderRadius.circular(8.0),
  116. border: Border.all(
  117. color: '#F6F6F6'.toColor(),
  118. width: 2,
  119. ),
  120. ),
  121. padding: EdgeInsets.symmetric(vertical: 17.w, horizontal: 12.w),
  122. child: Row(
  123. children: [
  124. Expanded(
  125. child: Padding(
  126. padding: const EdgeInsets.only(right: 12).w,
  127. child: Text(agenda.content ?? '',
  128. maxLines: 1,
  129. overflow: TextOverflow.ellipsis,
  130. style: TextStyle(
  131. fontSize: 15.sp,
  132. fontWeight: FontWeight.bold,
  133. color: ColorName.primaryTextColor)),
  134. ),
  135. ),
  136. GestureDetector(
  137. onTap: () {
  138. controller.onClickThinking(agenda);
  139. },
  140. child: Container(
  141. decoration: getPrimaryBtnDecoration(6),
  142. padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 4).w,
  143. child: Text(
  144. StringName.homeTalkThinking.tr,
  145. style: TextStyle(fontSize: 13.sp, color: ColorName.white),
  146. ),
  147. ),
  148. )
  149. ],
  150. ),
  151. );
  152. }
  153. Widget _buildTodoStatusView() {
  154. if (controller.talkBean.value?.status == TalkStatus.analysisFail) {
  155. return getTalkFailView();
  156. } else if (controller.talkBean.value?.status == TalkStatus.analysing ||
  157. controller.talkBean.value?.status == TalkStatus.waitAnalysis) {
  158. return getTalkLoadingView();
  159. } else if (controller.talkBean.value?.status == TalkStatus.analysisSuccess) {
  160. return ListView(
  161. padding: EdgeInsets.only(left: 12.w, right: 12.w, bottom: 150.w),
  162. children: [_buildMineTodoList(), _buildAllTaskView()],
  163. );
  164. } else {
  165. return Container();
  166. }
  167. }
  168. }