controller.dart 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. import 'dart:io';
  2. import 'package:electronic_assistant/base/base_controller.dart';
  3. import 'package:electronic_assistant/data/bean/talks.dart';
  4. import 'package:electronic_assistant/data/consts/event_report_id.dart';
  5. import 'package:electronic_assistant/data/repositories/agenda_repository.dart';
  6. import 'package:electronic_assistant/data/repositories/config_repository.dart';
  7. import 'package:electronic_assistant/data/repositories/talk_repository.dart';
  8. import 'package:electronic_assistant/handler/event_handler.dart';
  9. import 'package:electronic_assistant/module/login/view.dart';
  10. import 'package:electronic_assistant/module/main/controller.dart';
  11. import 'package:electronic_assistant/module/talk/view.dart';
  12. import 'package:electronic_assistant/resource/string.gen.dart';
  13. import 'package:electronic_assistant/router/app_pages.dart';
  14. import 'package:electronic_assistant/utils/event_bus.dart';
  15. import 'package:electronic_assistant/utils/file_upload_check_helper.dart';
  16. import 'package:electronic_assistant/widget/pull_to_refresh.dart';
  17. import 'package:flutter/cupertino.dart';
  18. import 'package:get/get.dart';
  19. import '../../data/api/response/example_info_response.dart';
  20. import '../../data/bean/agenda.dart';
  21. import '../../data/repositories/account_repository.dart';
  22. import '../../resource/colors.gen.dart';
  23. import '../../utils/error_handler.dart';
  24. import '../../utils/toast_util.dart';
  25. import '../audiopicker/view.dart';
  26. class HomePageController extends BaseController {
  27. get isLogin => accountRepository.isLogin.value;
  28. get loginTxt => accountRepository.isLogin.value
  29. ? accountRepository.getUserSubName(accountRepository.phone)
  30. : StringName.homeGoLogin.tr;
  31. final refreshController = PullToRefreshController();
  32. BuildContext? todoTargetContext;
  33. RxList<TalkBean> get talkList => talkRepository.talkList;
  34. RxList<Agenda> get agendaList => agendaRepository.agendaList;
  35. @override
  36. void onReady() {
  37. super.onReady();
  38. refreshController.requestRefresh();
  39. eventBus.on(EventUserLogin, (arg) {
  40. requestHomeData();
  41. });
  42. eventBus.on(EventUserLogout, (arg) {
  43. talkRepository.setTalkList([]);
  44. agendaRepository.setAgendaList([]);
  45. requestHomeData();
  46. });
  47. }
  48. @override
  49. void dispose() {
  50. super.dispose();
  51. eventBus.off(EventUserLogin);
  52. eventBus.off(EventUserLogout);
  53. }
  54. void requestHomeData() async {
  55. try {
  56. if (accountRepository.isLogin.value) {
  57. await Future.wait([
  58. talkRepository.refreshHomeTalkData(),
  59. agendaRepository.requestHomeAgendaData(),
  60. ]);
  61. } else {
  62. ExampleInfoResponse exampleInfo =
  63. await configRepository.getExampleInfo();
  64. talkRepository.setTalkList(
  65. exampleInfo.talkInfoList != null ? exampleInfo.talkInfoList! : []);
  66. agendaRepository.setAgendaList(
  67. exampleInfo.agendaList != null ? exampleInfo.agendaList! : []);
  68. }
  69. } catch (e) {
  70. refreshController.refreshCompleted();
  71. // Handle errors if necessary
  72. } finally {
  73. refreshController.refreshCompleted();
  74. }
  75. }
  76. void requestName(String? newName, TalkBean bean) {
  77. talkRepository.talkRename(bean.id, newName).then((data) {
  78. bean.title.value = newName;
  79. ToastUtil.showToast(StringName.talkRenameSuccess.tr);
  80. }).catchError((error) {
  81. ErrorHandler.toastError(error, message: StringName.talkRenameFail.tr);
  82. });
  83. }
  84. void goTalkRecordPage() {
  85. Get.find<MainController>().updateIndexByPageName(StringName.mainTabFile);
  86. }
  87. void showLoginDrawer() {
  88. Get.find<MainController>().openDrawer();
  89. }
  90. void requestDelete(TalkBean item) {
  91. talkRepository.talkDelete(item.id).then((data) {
  92. requestHomeData();
  93. }).catchError((error) {
  94. ErrorHandler.toastError(error, message: StringName.talkDeleteFail.tr);
  95. });
  96. }
  97. void agendaComplete(Agenda item) {
  98. agendaRepository.agendaFinish(item.id, true).then((data) {
  99. agendaRepository.requestHomeAgendaData();
  100. }).catchError((error) {
  101. ErrorHandler.toastError(error);
  102. });
  103. }
  104. void onPickerAudioFile() async {
  105. EventHandler.report(EventId.event_100030);
  106. if (!accountRepository.isLogin.value) {
  107. Get.toNamed(RoutePath.login);
  108. ToastUtil.showToast(StringName.errorCodeNoLogin.tr);
  109. return;
  110. }
  111. if (Platform.isAndroid) {
  112. _showAndroidFilePicker();
  113. } else {
  114. FileUploadCheckHelper.choicePlatformLocalFileAndCreateOrder();
  115. }
  116. }
  117. void onGoAgendaList() {
  118. if (!accountRepository.isLogin.value) {
  119. Get.toNamed(RoutePath.login);
  120. ToastUtil.showToast(StringName.errorCodeNoLogin.tr);
  121. return;
  122. }
  123. Get.toNamed(RoutePath.task);
  124. }
  125. void onTalkItemClick(TalkBean item) {
  126. if (item.isExample == true) {
  127. EventHandler.report(EventId.event_100001);
  128. }
  129. TalkPage.start(item);
  130. }
  131. void onRecordClick() {
  132. Get.toNamed(RoutePath.record);
  133. }
  134. void onLoginClick() {
  135. LoginPage.start(fromType: LoginFromType.mainLogin);
  136. }
  137. void _showAndroidFilePicker() {
  138. Get.bottomSheet(const AudioPickerPage(),
  139. isScrollControlled: true,
  140. barrierColor: ColorName.black55,
  141. backgroundColor: ColorName.transparent);
  142. }
  143. }