config_repository.dart 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import 'package:electronic_assistant/base/app_base_request.dart';
  2. import 'package:electronic_assistant/data/api/atmob_api.dart';
  3. import 'package:electronic_assistant/utils/async_util.dart';
  4. import 'package:electronic_assistant/utils/http_handler.dart';
  5. import '../../utils/app_info_util.dart';
  6. import '../api/request/config_request.dart';
  7. import '../api/response/config_response.dart';
  8. import '../api/response/example_info_response.dart';
  9. import '../bean/config_bean.dart';
  10. import '../bean/version_update_bean.dart';
  11. class ConfigRepository {
  12. ConfigRepository._();
  13. ExampleInfoResponse? _exampleInfo;
  14. Future<ExampleInfoResponse> getExampleInfo() async {
  15. if (_exampleInfo != null) {
  16. return _exampleInfo!;
  17. }
  18. return await AsyncUtil.retry(
  19. () => _requestExampleInfo(), const Duration(seconds: 1),
  20. maxRetry: 3);
  21. }
  22. Future<ExampleInfoResponse> _requestExampleInfo() {
  23. return atmobApi
  24. .exampleInfo(AppBaseRequest())
  25. .then(HttpHandler.handle(true))
  26. .then((response) {
  27. _exampleInfo = response;
  28. return response;
  29. });
  30. }
  31. Future<ConfigResponse> configs(List<String> confCodes) {
  32. return atmobApi
  33. .configs(ConfigRequest(confCodes))
  34. .then(HttpHandler.handle(true));
  35. }
  36. Future<VersionUpdateBean?> getAppVersion() async {
  37. ConfigResponse configResponse = await configs(['app_update']);
  38. if (configResponse.list.isEmpty) {
  39. return null;
  40. }
  41. ConfigBean configBean = configResponse.list.first;
  42. if (configBean.value is! Map<String, dynamic>) {
  43. return null;
  44. }
  45. VersionUpdateBean bean = VersionUpdateBean.fromJson(configBean.value);
  46. String? localVersionName = appInfoUtil.appVersionName;
  47. if (bean.version.isEmpty || localVersionName == null) {
  48. return null;
  49. }
  50. if (needsUpdate(bean.version, localVersionName)) {
  51. return bean;
  52. }
  53. return null;
  54. }
  55. bool needsUpdate(String serverVersion, String localVersion) {
  56. List<int> serverParts =
  57. serverVersion.replaceFirst('v', '').split('.').map(int.parse).toList();
  58. List<int> localParts = localVersion.split('.').map(int.parse).toList();
  59. for (int i = 0; i < serverParts.length; i++) {
  60. if (serverParts[i] > localParts[i]) {
  61. return true;
  62. } else if (serverParts[i] < localParts[i]) {
  63. return false;
  64. }
  65. }
  66. return false;
  67. }
  68. }
  69. final configRepository = ConfigRepository._();