56 lines
2.0 KiB
Dart
56 lines
2.0 KiB
Dart
// Author: fruit.com.cn
|
||
|
||
import 'dev_config.dart';
|
||
import 'prod_config.dart';
|
||
|
||
/// 客户端运行时配置。
|
||
///
|
||
/// 两套环境各一个文件:
|
||
/// - `dev_config.dart`:[DevConfig](本机联调)
|
||
/// - `prod_config.dart`:[ProdConfig](生产)
|
||
///
|
||
/// 切换环境只改下面这一个布尔值,不用传任何构建参数、也不做网络探测。
|
||
abstract final class AppConfig {
|
||
/// **环境开关**:true 用开发环境,false 用生产环境。
|
||
///
|
||
/// 打生产包前必须改成 false;release 构建若仍为 true 会在启动时直接报错。
|
||
static const bool useDevConfig = false;
|
||
|
||
/// 当前选中的环境地址。
|
||
static String get baseUrl =>
|
||
useDevConfig ? DevConfig.baseUrl : ProdConfig.baseUrl;
|
||
|
||
/// 调试面板手改的地址(见 `ServerEndpoint`);为空表示用上面的环境地址。
|
||
static String _runtimeBaseUrl = '';
|
||
|
||
/// 启动期异步准备(iOS 无线数据权限弹窗),目录请求前等待它。
|
||
static Future<void>? _ready;
|
||
|
||
/// 启动准备完成信号;默认已完成,避免影响既有测试与调用方。
|
||
static Future<void> get ready => _ready ?? Future<void>.value();
|
||
static set ready(Future<void> value) => _ready = value;
|
||
|
||
static const Duration requestTimeout = Duration(seconds: 8);
|
||
|
||
/// 实际使用的服务地址:运行时手改优先,否则用环境开关选中的地址。
|
||
static String get apiBaseUrl =>
|
||
_runtimeBaseUrl.isNotEmpty ? _runtimeBaseUrl : baseUrl;
|
||
|
||
/// 应用一个已经规范化的运行时地址;传 null 表示清除。
|
||
static void applyRuntimeBaseUrl(String? value) {
|
||
_runtimeBaseUrl = value ?? '';
|
||
}
|
||
|
||
/// 清除运行时地址,主要给测试与重启流程用。
|
||
static void clearRuntimeBaseUrl() {
|
||
_runtimeBaseUrl = '';
|
||
}
|
||
|
||
/// 后端返回的是相对路径(/files/...),这里补上服务地址。
|
||
static String mediaUrl(String path) {
|
||
if (path.isEmpty) return '';
|
||
if (path.startsWith('http://') || path.startsWith('https://')) return path;
|
||
return '$apiBaseUrl$path';
|
||
}
|
||
}
|