config_repository.dart 2.4 KB

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