view.dart 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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 == TalkStatus.analysisFail) {
  169. return getTalkFailView();
  170. } else if (controller.talkBean.value?.status == TalkStatus.analysing ||
  171. controller.talkBean.value?.status == TalkStatus.waitAnalysis) {
  172. return getTalkLoadingView();
  173. } else if (controller.talkBean.value?.status ==
  174. TalkStatus.analysisSuccess) {
  175. return _buildTodoContent();
  176. } else {
  177. return Container();
  178. }
  179. }
  180. Widget _buildTodoContent() {
  181. if (controller.agendaAllList.isEmpty && !controller.isEditModel) {
  182. return buildAgendaEmptyView(110.h);
  183. }
  184. return ListView(
  185. padding: EdgeInsets.only(left: 12.w, right: 12.w, bottom: 150.w),
  186. children: [_buildMineTodoList(), _buildAllTaskView()],
  187. );
  188. }
  189. Widget _buildAddAgendaView() {
  190. return Obx(() {
  191. if (controller.isEditModel) {
  192. return Container(
  193. margin: EdgeInsets.only(bottom: 8.h),
  194. child: Builder(builder: (context) {
  195. return getAddAgendaView(StringName.talkAddAgendaProject.tr,
  196. onClick: () {
  197. controller.showAddAgendaDialog(context);
  198. });
  199. }),
  200. );
  201. } else {
  202. return Container();
  203. }
  204. });
  205. }
  206. }