config_repository.dart 2.9 KB

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