view.dart 7.0 KB

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