new_user_result_controller.dart 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import 'package:injectable/injectable.dart';
  2. import 'package:keyboard/base/base_controller.dart';
  3. import 'package:get/get.dart';
  4. import 'package:keyboard/data/bean/character_info.dart';
  5. import 'package:keyboard/data/repository/account_repository.dart';
  6. import 'package:keyboard/data/repository/characters_repository.dart';
  7. import 'package:keyboard/data/repository/keyboard_repository.dart';
  8. import 'package:keyboard/module/main/main_page.dart';
  9. import 'package:keyboard/utils/atmob_log.dart';
  10. import '../../../data/api/response/keyboard_meme_explain_response.dart';
  11. import '../../../data/api/response/user_info_response.dart';
  12. import '../../../data/bean/keyboard_info.dart';
  13. import '../../../resource/string.gen.dart';
  14. import '../../../utils/age_zodiac_sign_util.dart';
  15. import '../../../utils/error_handler.dart';
  16. import '../../../utils/http_handler.dart';
  17. import '../../../utils/toast_util.dart';
  18. @injectable
  19. class NewUserResultController extends BaseController {
  20. final tag = "NewUserResultController";
  21. final AccountRepository accountRepository;
  22. final KeyboardRepository keyboardRepository;
  23. final CharactersRepository charactersRepository;
  24. Rxn<UserInfoResponse> get _userInfo => accountRepository.userInfo;
  25. UserInfoResponse? get userInfo => _userInfo.value;
  26. Rx<KeyboardMemeExplainResponse> keyboardMemeExplain =
  27. KeyboardMemeExplainResponse().obs;
  28. final RxList<CharacterInfo> charactersList = <CharacterInfo>[].obs;
  29. final RxList<CharacterInfo> selectCharactersList = <CharacterInfo>[].obs;
  30. final Rx<KeyboardInfo> _newUserKeyboardInfo =
  31. KeyboardInfo().obs;
  32. KeyboardInfo get newUserKeyboardInfo => _newUserKeyboardInfo.value;
  33. NewUserResultController(
  34. this.accountRepository,
  35. this.keyboardRepository,
  36. this.charactersRepository,
  37. );
  38. @override
  39. void onInit() async {
  40. super.onInit();
  41. try {
  42. _newUserKeyboardInfo.value =
  43. Get.arguments["newUserKeyboardInfo"] as KeyboardInfo;
  44. } catch (e) {
  45. AtmobLog.e(tag, "获取新用户键盘信息失败: $e");
  46. }
  47. getMemeExplain();
  48. ever(_userInfo, (userInfo) {
  49. if (userInfo != null) {
  50. AtmobLog.d(tag, "获取用户信息成功");
  51. getMemeExplain();
  52. } else {
  53. AtmobLog.e(tag, "获取用户信息失败");
  54. }
  55. });
  56. getNewUserCharacterList();
  57. }
  58. clickBack() {
  59. Get.back();
  60. }
  61. void clickOpenNow() async {
  62. AtmobLog.d(tag, "点击立即使用");
  63. if (_newUserKeyboardInfo.value.id == null ||
  64. _newUserKeyboardInfo.value.id!.isEmpty) {
  65. return;
  66. }
  67. List<String> characterIds =
  68. selectCharactersList.map((e) => e.id).cast<String>().toList();
  69. keyboardRepository
  70. .keyboardCharacterStart(
  71. keyboardId: _newUserKeyboardInfo.value.id!,
  72. characterIds: characterIds,
  73. )
  74. .then((_) {
  75. print(
  76. '$tag keyboardCharacterUpdate success ${characterIds.toList()}',
  77. );
  78. AtmobLog.d(tag, "更新键盘人设成功");
  79. // 刷新键盘人设数据
  80. keyboardRepository.getKeyboardHomeInfo();
  81. MainPage.start();
  82. })
  83. .catchError((error) {
  84. if (error is ServerErrorException) {
  85. ToastUtil.show(error.message);
  86. }
  87. });
  88. }
  89. Future<void> getMemeExplain() async {
  90. try {
  91. if (!_isValid(userInfo?.birthday) ||
  92. !_isValid(_newUserKeyboardInfo.value.birthday)) {
  93. AtmobLog.e(tag, "生日信息不完整,无法获取星座");
  94. return;
  95. }
  96. final result = await keyboardRepository.getKeyboardMemeExplain(
  97. birthday: userInfo!.birthday!,
  98. targetBirthday: _newUserKeyboardInfo.value.birthday!,
  99. );
  100. keyboardMemeExplain.value = result;
  101. AtmobLog.d(tag, "获取星座梗语与解读成功");
  102. } catch (e) {
  103. AtmobLog.e(tag, "获取星座梗语与解读失败: $e");
  104. }
  105. }
  106. Future<void> getNewUserCharacterList() async {
  107. try {
  108. final result = await charactersRepository.getNewUserCharactersList();
  109. charactersList.value = result.characterInfo;
  110. } catch (e) {
  111. AtmobLog.e(tag, "获取新用户角色列表失败: $e");
  112. }
  113. }
  114. void onSelected(CharacterInfo characterInfo) {
  115. if (selectCharactersList.contains(characterInfo)) {
  116. selectCharactersList.remove(characterInfo);
  117. } else {
  118. selectCharactersList.add(characterInfo);
  119. }
  120. }
  121. bool _isValid(String? s) => s != null && s.trim().isNotEmpty;
  122. Zodiac? get zodiacLabelFromNewUserKeyboardInfo {
  123. final birthday = newUserKeyboardInfo.birthday;
  124. final gender = newUserKeyboardInfo.gender;
  125. if (birthday?.isEmpty != false || gender == null) return null;
  126. final zodiac = AgeZodiacSignUtil.getZodiacWithGenderLabel(
  127. birthday!,
  128. gender,
  129. );
  130. if (zodiac.name == '未知星座') return null;
  131. return zodiac;
  132. }
  133. Zodiac? get zodiacLabelFromUserInfo {
  134. final birthday = userInfo?.birthday;
  135. final gender = userInfo?.gender;
  136. if (birthday?.isEmpty != false || gender == null) return null;
  137. final zodiac = AgeZodiacSignUtil.getZodiacWithGenderLabel(
  138. birthday!,
  139. gender,
  140. );
  141. if (zodiac.name == '未知星座') return null;
  142. return zodiac;
  143. }
  144. }