view.dart 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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. initiallyExpanded: true,
  72. onExpansionChanged: (value) {
  73. controller.mineAgendaIsExpanded.value = value;
  74. },
  75. shape: RoundedRectangleBorder(
  76. borderRadius: BorderRadius.circular(4.0),
  77. side: const BorderSide(color: Colors.transparent),
  78. ),
  79. collapsedShape: RoundedRectangleBorder(
  80. borderRadius: BorderRadius.circular(4.0),
  81. side: const BorderSide(color: Colors.transparent),
  82. ),
  83. minTileHeight: 46.h,
  84. showTrailingIcon: false,
  85. childrenPadding: EdgeInsets.zero,
  86. tilePadding: EdgeInsets.zero,
  87. title: Row(
  88. children: [
  89. Text(StringName.talkTabMyTask.tr,
  90. style: TextStyle(
  91. fontSize: 14.sp,
  92. color: ColorName.secondaryTextColor)),
  93. const Spacer(),
  94. Obx(() {
  95. return Row(
  96. children: [
  97. Text(
  98. '${controller.agendaMineList.length}${StringName.talkTodoItem.tr}',
  99. style: TextStyle(
  100. fontSize: 15.sp,
  101. color: ColorName.secondaryTextColor),
  102. ),
  103. SizedBox(width: 3.w),
  104. SizedBox(
  105. width: 16.w,
  106. height: 16.w,
  107. child: controller.mineAgendaIsExpanded.value
  108. ? Assets.images.iconTalkExpand.image()
  109. : Assets.images.iconTalkCollapse.image()),
  110. ],
  111. );
  112. }),
  113. SizedBox(width: 12.w),
  114. ],
  115. ),
  116. children: controller.agendaMineList.map((agenda) {
  117. return _buildMineItem(agenda);
  118. }).toList(),
  119. ),
  120. );
  121. }),
  122. );
  123. });
  124. }
  125. Widget _buildMineItem(Agenda agenda) {
  126. return Container(
  127. margin: EdgeInsets.only(bottom: 8.w),
  128. decoration: BoxDecoration(
  129. borderRadius: BorderRadius.circular(8.0),
  130. border: Border.all(
  131. color: '#F6F6F6'.toColor(),
  132. width: 2,
  133. ),
  134. ),
  135. padding: EdgeInsets.symmetric(vertical: 17.w, horizontal: 12.w),
  136. child: Row(
  137. children: [
  138. Expanded(
  139. child: Padding(
  140. padding: const EdgeInsets.only(right: 12).w,
  141. child: Text(agenda.content ?? '',
  142. maxLines: 1,
  143. overflow: TextOverflow.ellipsis,
  144. style: TextStyle(
  145. fontSize: 15.sp,
  146. fontWeight: FontWeight.bold,
  147. color: ColorName.primaryTextColor)),
  148. ),
  149. ),
  150. GestureDetector(
  151. onTap: () {
  152. controller.onClickThinking(agenda);
  153. },
  154. child: Container(
  155. decoration: getPrimaryBtnDecoration(6),
  156. padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 4).w,
  157. child: Text(
  158. StringName.homeTalkThinking.tr,
  159. style: TextStyle(fontSize: 13.sp, color: ColorName.white),
  160. ),
  161. ),
  162. )
  163. ],
  164. ),
  165. );
  166. }
  167. Widget _buildTodoStatusView() {
  168. if (controller.talkBean.value?.status.value == TalkStatus.analysisFail) {
  169. return getTalkFailView();
  170. } else if (controller.talkBean.value?.status.value ==
  171. TalkStatus.analysing ||
  172. controller.talkBean.value?.status.value == TalkStatus.waitAnalysis ||
  173. controller.talkBean.value?.status.value == TalkStatus.notAnalysis) {
  174. return getTalkAnalyseView(
  175. controller.talkController.isUploading.value == true &&
  176. controller.talkController.talkBean.value?.status.value ==
  177. TalkStatus.notAnalysis
  178. ? '录音上传中,请勿关闭小听'
  179. : controller
  180. .talkController.talkBean.value?.progressContent.value ??
  181. '',
  182. controller.talkController.isUploading.value == true &&
  183. controller.talkController.talkBean.value?.status.value ==
  184. TalkStatus.notAnalysis
  185. ? controller.talkController.uploadProgress.value
  186. : controller.talkController.talkBean.value?.progress.value
  187. ?.toDouble() ??
  188. 0.0);
  189. } else if (controller.talkBean.value?.status.value ==
  190. TalkStatus.analysisSuccess) {
  191. return _buildTodoContent();
  192. } else {
  193. return Container();
  194. }
  195. }
  196. Widget _buildTodoContent() {
  197. if (controller.agendaAllList.isEmpty && !controller.isEditModel) {
  198. return buildAgendaEmptyView(110.h);
  199. }
  200. return ListView(
  201. padding: EdgeInsets.only(left: 12.w, right: 12.w, bottom: 150.w),
  202. children: [_buildMineTodoList(), _buildAllTaskView()],
  203. );
  204. }
  205. Widget _buildAddAgendaView() {
  206. return Obx(() {
  207. if (controller.isEditModel) {
  208. return Container(
  209. margin: EdgeInsets.only(bottom: 8.h),
  210. child: Builder(builder: (context) {
  211. return getAddAgendaView(StringName.talkAddAgendaProject.tr,
  212. onClick: () {
  213. controller.showAddAgendaDialog(context);
  214. });
  215. }),
  216. );
  217. } else {
  218. return Container();
  219. }
  220. });
  221. }
  222. }