view.dart 5.9 KB

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