config_repository.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import 'dart:convert';
  2. import 'package:injectable/injectable.dart';
  3. import 'package:keyboard/data/api/response/character_custom_config_response.dart';
  4. import '../../base/app_base_request.dart';
  5. import '../../di/get_it.dart';
  6. import '../../utils/async_util.dart';
  7. import '../../utils/atmob_log.dart';
  8. import '../../utils/http_handler.dart';
  9. import '../../utils/intimacy_util.dart';
  10. import '../api/atmob_api.dart';
  11. import '../api/request/config_request.dart';
  12. import '../api/response/config_response.dart';
  13. import 'package:get/get.dart';
  14. import '../bean/custom_config_info.dart';
  15. import '../bean/default_avatar_info.dart';
  16. import '../bean/intimacy_config_info.dart';
  17. @lazySingleton
  18. class ConfigRepository {
  19. final tag = "ConfigRepository";
  20. final AtmobApi atmobApi;
  21. final Rxn<CustomConfigInfo> _characterCustomConfig = Rxn<CustomConfigInfo>();
  22. // 里面包含人设头像
  23. Rxn<CustomConfigInfo> get characterCustomConfig => _characterCustomConfig;
  24. // 人物和键盘的头像
  25. final Rxn<DefaultAvatarInfo> defaultAvatarInfo = Rxn<DefaultAvatarInfo>();
  26. final Rxn<IntimacyConfigInfo> intimacyConfigInfo = Rxn<IntimacyConfigInfo>();
  27. final RxString memberTips = ''.obs;
  28. ConfigRepository(this.atmobApi) {
  29. AtmobLog.d(tag, '$tag....init');
  30. refreshConfig();
  31. refreshCharacterCustomConfig();
  32. }
  33. // 更新配置的值
  34. void refreshConfig() {
  35. AsyncUtil.retry(
  36. () => requestConfigsData(),
  37. Duration(seconds: 4),
  38. maxRetry: 100,
  39. ).then((configsResponse) {
  40. final list = configsResponse.list;
  41. if (list == null || list.isEmpty) {
  42. return;
  43. }
  44. if (list.isNotEmpty) {
  45. for (var config in list) {
  46. if (config.confCode == 'intimacy') {
  47. intimacyConfigInfo.value = IntimacyConfigInfo.fromJson(
  48. config.value,
  49. );
  50. AtmobLog.d(tag, '获取亲密度配置: ${jsonEncode(list.map((e) => e.toJson()).toList())}');
  51. // IntimacyUtil.setConfig(intimacyConfigInfo.value);
  52. } else if (config.confCode == 'default_avatar') {
  53. defaultAvatarInfo.value = DefaultAvatarInfo.fromJson(config.value);
  54. AtmobLog.d(tag, '获取默认头像配置: ${defaultAvatarInfo.value?.toJson()}');
  55. } else if(config.confCode=='member_tips'){
  56. memberTips.value = config.value['tips'] ?? '';
  57. AtmobLog.d(tag, '购买须知: ${memberTips.value}');
  58. }
  59. }
  60. }
  61. });
  62. }
  63. Future<void> refreshCharacterCustomConfig() async {
  64. try {
  65. final value = await getCharacterCustomConfig();
  66. _characterCustomConfig.value = value.customConfig;
  67. } catch (e) {
  68. AtmobLog.e(tag, "获取定制人设配置失败: $e");
  69. }
  70. }
  71. /// 获取配置信息
  72. Future<ConfigResponse> requestConfigsData() {
  73. return atmobApi
  74. .confs(ConfigRequest(confCodes: ['intimacy', 'default_avatar', 'member_tips']))
  75. .then(HttpHandler.handle(true));
  76. }
  77. /// 获取定制人设配置
  78. Future<CharacterCustomConfigResponse> getCharacterCustomConfig() {
  79. return atmobApi
  80. .getCharacterCustomConfig(AppBaseRequest())
  81. .then(HttpHandler.handle(true));
  82. }
  83. static ConfigRepository getInstance() => getIt.get<ConfigRepository>();
  84. }