Browse Source

fix: 修复网络请求中渠道判断逻辑以正确获取服务器URL

调整DioManager中渠道信息的获取方式,优先从VersionUpdateService获取缓存的渠道信息,避免在服务未就绪时直接读取环境变量导致的渠道判断错误。当版本服务不可用时,降级使用平台判断(iOS为GLOBAL_APPLE)和环境变量兜底,确保服务器URL选择逻辑的可靠性。
newdev_shunjiawei
lxm 7 months ago
parent
commit
d7d49188c0
  1. 25
      lib/data/services/network/dio_manager.dart
  2. 2
      pubspec.yaml

25
lib/data/services/network/dio_manager.dart

@ -1,7 +1,11 @@
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:get/get.dart' hide Response;
import '../../models/channel_app_model.dart';
import '../version_update_service.dart';
import 'auth_interceptor.dart';
import 'nw_method.dart';
@ -10,12 +14,29 @@ class DioManager {
factory DioManager() => _shared;
late Dio dio;
// 获取当前渠道信息,优先从版本服务获取,降级到平台判断和.env
UserChannel get _currentChannel {
try {
if (Get.isRegistered<VersionUpdateService>()) {
// print("lxm---${VersionUpdateService.to.cachedChannel}");
return VersionUpdateService.to.cachedChannel;
}
} catch (_) {}
// 版本服务未就绪时,根据平台判断
if (Platform.isIOS) {
return UserChannel.GLOBAL_APPLE;
}
final channelName = dotenv.env['Channel'] ?? 'OFFICIAL';
return UserChannel.fromName(channelName);
}
// 根据地区获取服务器URL
String get baseUrl {
final countryCode = Get.deviceLocale?.countryCode?.toUpperCase();
final isChinaMainland = countryCode == 'CN';
final channel = dotenv.env['Channel'] ?? 'OFFICIAL';
if (!isChinaMainland || channel == "GLOBAL_GOOGLE") {
final channel = _currentChannel;
if (!isChinaMainland || channel == UserChannel.GLOBAL_GOOGLE) {
return dotenv.env['HW_SERVER_URL'] ?? '';
} else {
return dotenv.env['SERVER_URL'] ?? '';

2
pubspec.yaml

@ -1,7 +1,7 @@
name: voitrans
description: "Voitrans - AI Voice Assistant."
publish_to: "none"
version: 1.0.24+98
version: 1.0.25+99
environment:
sdk: ">=3.3.0 <4.0.0"

Loading…
Cancel
Save