keyboard_repository.dart 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. import 'package:get/get.dart';
  2. import 'package:injectable/injectable.dart';
  3. import 'package:keyboard/base/app_base_request.dart';
  4. import 'package:keyboard/data/api/request/keyboard_character_update_request.dart';
  5. import 'package:keyboard/data/api/request/keyboard_generate_request.dart';
  6. import 'package:keyboard/data/api/request/keyboard_list_request.dart';
  7. import 'package:keyboard/data/api/response/keyboard_generate_response.dart';
  8. import 'package:keyboard/data/api/response/keyboard_love_index_response.dart';
  9. import 'package:keyboard/data/api/response/keyboard_prologue_list_response.dart';
  10. import 'package:keyboard/utils/atmob_log.dart';
  11. import 'dart:convert';
  12. import '../../di/get_it.dart';
  13. import '../../utils/async_util.dart';
  14. import '../../utils/http_handler.dart';
  15. import '../api/atmob_api.dart';
  16. import '../api/request/keyboard_character_list_request.dart';
  17. import '../api/request/keyboard_choose_request.dart';
  18. import '../api/request/keyboard_update_request.dart';
  19. import '../api/response/keyboard_character_list_response.dart';
  20. import '../api/response/keyboard_home_info_response.dart';
  21. import '../api/response/keyboard_list_response.dart';
  22. import '../bean/keyboard_info.dart';
  23. import '../consts/error_code.dart';
  24. @lazySingleton
  25. class KeyboardRepository {
  26. final tag = "KeyboardRepository";
  27. final AtmobApi atmobApi;
  28. final RxList<KeyboardInfo> _keyboardInfoList = RxList();
  29. RxList<KeyboardInfo> get keyboardInfoList => _keyboardInfoList;
  30. final Rxn<KeyboardLoveIndexResponse> _homeLoveIndex =
  31. Rxn<KeyboardLoveIndexResponse>();
  32. Rxn<KeyboardLoveIndexResponse> get homeLoveIndex => _homeLoveIndex;
  33. final Rxn<KeyboardHomeInfoResponse> _homeInfo =
  34. Rxn<KeyboardHomeInfoResponse>();
  35. Rxn<KeyboardHomeInfoResponse> get homeInfo => _homeInfo;
  36. CancelableFuture? homeInfoFuture;
  37. CancelableFuture? homeLoveIndexFuture;
  38. KeyboardRepository(this.atmobApi) {
  39. print('$tag....init');
  40. refreshData();
  41. }
  42. Future refreshData() async {
  43. refreshKeyboardList();
  44. await Future.delayed(const Duration(milliseconds: 500));
  45. // 延迟为了保证首页数据能够正常获取,不然保存的时候,获取太快了,导致还是拉到旧的数值
  46. refreshUserInfo();
  47. refreshLoveIndex();
  48. }
  49. void refreshUserInfo() {
  50. homeInfoFuture?.cancel();
  51. homeInfoFuture = AsyncUtil.retryWithExponentialBackoff(
  52. () => getKeyboardHomeInfo(),
  53. 10,
  54. predicate: (error) {
  55. if (error is ServerErrorException) {
  56. return error.code != ErrorCode.noLoginError;
  57. }
  58. return true;
  59. },
  60. );
  61. }
  62. void refreshLoveIndex() {
  63. homeLoveIndexFuture?.cancel();
  64. homeLoveIndexFuture = AsyncUtil.retryWithExponentialBackoff(
  65. () => getKeyboardLoveIndex(),
  66. 10,
  67. predicate: (error) {
  68. if (error is ServerErrorException) {
  69. return error.code != ErrorCode.noLoginError;
  70. }
  71. return true;
  72. },
  73. );
  74. }
  75. Future cleanData() async {
  76. _keyboardInfoList.clear();
  77. getKeyboardHomeInfo();
  78. getKeyboardLoveIndex();
  79. }
  80. Future refreshKeyboardList() async {
  81. return getKeyboardList().then((response) {
  82. _keyboardInfoList.value = response.keyboardInfos;
  83. print('$tag refreshKeyboardList: ${response.keyboardInfos.first.id}');
  84. });
  85. }
  86. // 获取键盘列表
  87. Future<KeyboardListResponse> getKeyboardList({String? type}) {
  88. return atmobApi
  89. .getKeyboardList(KeyboardListRequest(type: type))
  90. .then(HttpHandler.handle(true));
  91. }
  92. // 获取键盘人设列表
  93. Future<KeyboardCharacterListResponse> getKeyboardCharacterList({
  94. required String keyboardId,
  95. }) {
  96. return atmobApi
  97. .getKeyboardCharacterList(
  98. KeyboardCharacterListRequest(keyboardId: keyboardId),
  99. )
  100. .then(HttpHandler.handle(true));
  101. }
  102. //更新键盘人设
  103. Future<void> keyboardCharacterUpdate({
  104. required List<String> characterIds,
  105. required String keyboardId,
  106. }) {
  107. return atmobApi
  108. .keyboardCharacterUpdate(
  109. KeyboardCharacterUpdateRequest(
  110. keyboardId: keyboardId,
  111. characterIds: characterIds,
  112. ),
  113. )
  114. .then(HttpHandler.handle(true));
  115. }
  116. // 更新键盘信息
  117. Future<void> updateKeyboardInfo({
  118. required String keyboardId,
  119. String? name,
  120. String? imageUrl,
  121. String? birthday,
  122. int? intimacy,
  123. int? gender,
  124. }) {
  125. return atmobApi
  126. .keyboardUpdate(
  127. KeyboardUpdateRequest(
  128. keyboardId: keyboardId,
  129. name: name,
  130. imageUrl: imageUrl,
  131. birthday: birthday,
  132. intimacy: intimacy,
  133. gender: gender,
  134. ),
  135. )
  136. .then(HttpHandler.handle(false));
  137. }
  138. // 选择键盘
  139. Future<void> keyboardChoose({required String keyboardId}) {
  140. return atmobApi
  141. .keyboardChoose(KeyboardChooseRequest(keyboardId: keyboardId))
  142. .then(HttpHandler.handle(true));
  143. }
  144. // 获取开场白列表
  145. Future<KeyboardPrologueListResponse> getPrologueList() {
  146. return atmobApi
  147. .getPrologueList(AppBaseRequest())
  148. .then(HttpHandler.handle(true));
  149. }
  150. // 获取首页信息
  151. Future<KeyboardHomeInfoResponse> getKeyboardHomeInfo() {
  152. return atmobApi
  153. .getKeyboardHomeInfo(AppBaseRequest())
  154. .then(HttpHandler.handle(true))
  155. .then((response) {
  156. _homeInfo.value = response;
  157. return response;
  158. });
  159. }
  160. // 获取恋爱指数
  161. Future<KeyboardLoveIndexResponse> getKeyboardLoveIndex() {
  162. return atmobApi
  163. .getKeyboardLoveIndex(AppBaseRequest())
  164. .then(HttpHandler.handle(false))
  165. .then((response) {
  166. _homeLoveIndex.value = response;
  167. return response;
  168. });
  169. }
  170. // 生成键盘
  171. Future<KeyboardGenerateResponse> getKeyboardGenerate({
  172. required String name,
  173. required String imageUrl,
  174. required String birthday,
  175. required int intimacy,
  176. required int gender,
  177. }) {
  178. return atmobApi
  179. .keyboardGenerate(
  180. KeyboardGenerateRequest(
  181. intimacy: intimacy,
  182. name: name,
  183. gender: gender,
  184. birthday: birthday,
  185. imageUrl: imageUrl,
  186. ),
  187. )
  188. .then(HttpHandler.handle(true))
  189. .then((response) {
  190. return response;
  191. });
  192. }
  193. static KeyboardRepository getInstance() => getIt.get<KeyboardRepository>();
  194. }