view.dart 8.1 KB

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