new_user_result_controller.dart 5.3 KB

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