2.5 KiB
2.5 KiB
INBOX
[已处理] K68-A 指定 API_BASE_URL 时跳过地址探测
背景
正式包通过 --dart-define=API_BASE_URL=http://39.162.50.99:8081 指定接口地址,
但 AppConfig.probeAndApplyBaseUrl() 不支持构建期地址:它只按
127.0.0.1 → 192.168.31.187 → 公网 探测,探测结果又会覆盖 apiBaseUrl。
后果:正式包启动时仍会去探测局域网;若公网暂时不可达,会回落到开发机地址
192.168.31.187,正式包里所有请求都指向错误服务器。
目标
API_BASE_URL已指定时,不再探测,直接使用该地址。- 运行时地址(用户在 App 内手动改的服务器)仍保持最高优先级,不被构建期地址覆盖。
- 未指定
API_BASE_URL时,探测逻辑保持现状。
实现
lib/core/config/app_config.dart的probeAndApplyBaseUrl:
static Future<void> probeAndApplyBaseUrl({
Future<bool> Function(String baseUrl)? probe,
String? fallbackBaseUrl,
String? compiledOverride, // 仅测试注入用
}) async {
final compiled = compiledOverride ?? compiledBaseUrl;
if (compiled.isNotEmpty) {
// 构建期已指定接口地址:直接使用,避免正式包回落开发机地址
if (_runtimeBaseUrl.isEmpty) applyRuntimeBaseUrl(compiled);
return;
}
// …原有探测逻辑不变
}
lib/main.dart不改(已AppConfig.ready = AppConfig.probeAndApplyBaseUrl())。- 测试
test/config/补充:- 传
compiledOverride时:probe回调一次都不会被调用,AppConfig.apiBaseUrl等于该地址 - 已存在运行时地址且传
compiledOverride时:运行时地址不被覆盖 - 不传
compiledOverride(默认空)时:探测逻辑与现有测试保持一致 - 测试结束复位运行时地址
- 传
验收
- 门禁:
dart analyze lib test零告警、flutter test全过、flutter build apk --debug成功。 - 复核用正式包构建命令(Trae 负责重打,不需要 Codex 执行):
flutter build apk --release --target-platform android-arm,android-arm64 \
--dart-define=API_BASE_URL=http://39.162.50.99:8081
Git
- 从
develop拉fix/lock-compiled-base-url。 - 提交:
fix(config): 指定 API_BASE_URL 时跳过地址探测,作者Zhou Weidong <502333560@qq.com>。 --no-ff合回develop并 push;FruitServer/docs/plans/PROGRESS.md追加 K68-A 留痕。
约束
- 全程中文;禁止
git add -A;不改探测候选顺序与超时;完成后停住等待验收。