48 lines
1.6 KiB
Dart
48 lines
1.6 KiB
Dart
import 'package:client_proxy_framework/client_proxy_framework.dart';
|
||
|
||
/// 从 `common_info.extConfig`([ExtConfigRuntime])与 `skin_config.extConfig.defaults` 解析文档类 URL。
|
||
/// 用于用户协议、隐私政策及后续其他 H5 页面。
|
||
abstract final class ExtConfigDocumentUrls {
|
||
ExtConfigDocumentUrls._();
|
||
|
||
/// 用户协议(wire 键由 skin 的 `agreementUrl` → `agreement` 等映射)。
|
||
static String? get agreementUrl =>
|
||
_resolve((d) => d.agreementUrl);
|
||
|
||
/// 隐私政策(wire 键由 skin 的 `privacyUrl` → `privacy` 等映射)。
|
||
static String? get privacyUrl =>
|
||
_resolve((d) => d.privacyUrl);
|
||
|
||
/// 通用:优先 [ExtConfigRuntime.data],再回退到换皮默认 [AppConfig.extConfigDefaults]。
|
||
static String? resolve(String? Function(ExtConfigData d) pick) => _resolve(pick);
|
||
|
||
static String? _resolve(String? Function(ExtConfigData d) pick) {
|
||
final runtime = ExtConfigRuntime.data.value;
|
||
if (runtime != null) {
|
||
final u = pick(runtime)?.trim();
|
||
if (u != null && u.isNotEmpty) return u;
|
||
}
|
||
final skin = _fromSkinDefaults();
|
||
if (skin != null) {
|
||
final u = pick(skin)?.trim();
|
||
if (u != null && u.isNotEmpty) return u;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
static ExtConfigData? _fromSkinDefaults() {
|
||
final cfg = ApiClient.instance.config;
|
||
final raw = cfg.extConfigDefaults;
|
||
final schema = cfg.extConfigKeySchema;
|
||
if (raw == null || raw.isEmpty) return null;
|
||
try {
|
||
return ExtConfigData.fromJson(
|
||
Map<String, dynamic>.from(raw),
|
||
schema: schema,
|
||
);
|
||
} catch (_) {
|
||
return null;
|
||
}
|
||
}
|
||
}
|