/// 环境入口配置(P3 计划 Task 2)。 /// /// 值经 `--dart-define=KEY=value` 覆盖;缺省指向 Android 模拟器宿主回环 /// (10.0.2.2 = 模拟器内看到的宿主机 localhost,见计划「模拟器网络回环」 /// 偏差登记)。`String.fromEnvironment` 为编译期常量,不可运行时切换。 class ApiConfig { const ApiConfig._(); /// cn-api 基地址(不含 `/v1` 前缀——契约 servers.url 为 `/v1`, /// 由 [ApiClient] 统一拼接到各端点路径)。 static const String baseUrl = String.fromEnvironment( 'API_BASE', defaultValue: 'http://10.0.2.2:8080', ); /// viewer 观众端基地址(Task 4 分享二维码链接用)。 static const String viewerBase = String.fromEnvironment( 'VIEWER_BASE', defaultValue: 'http://10.0.2.2:5175', ); /// 观众端相册链接:`{VIEWER_BASE}/a/{token}`(Task 4 qr 分享用, /// viewer 路由约定)。[lang] 附加 `?lang=`(viewer i18n 分享链接语言 /// 参数,UI-03 页面 19:接收端据此呈现,仅认 zh-CN/en)。 static String viewerAlbumUrl(String publicToken, {String? lang}) { final base = '$viewerBase/a/$publicToken'; return lang == null ? base : '$base?lang=$lang'; } }