apply method
应用配置到各个模块 返回应用结果
Implementation
Future<StormyConfigApplied> apply() async {
bool networkApplied = false;
bool dialogApplied = false;
bool storageApplied = false;
bool refreshApplied = false;
bool themeApplied = false;
bool localizationApplied = false;
final List<String> sdkApplied = [];
// 存储配置到全局访问器
StormyConfigAccessor.initialize(theme: theme, i18n: i18n);
// 应用网络配置
if (network != null) {
try {
final client = StormyNetworkClient(config: network!);
StormyConfigAccessor.setNetworkClient(client);
networkApplied = true;
} catch (e) {
print('网络配置应用失败: $e');
}
}
// 应用弹窗配置
if (dialog != null) {
try {
StormyDialog.instance.initialize(dialog!);
dialogApplied = true;
} catch (e) {
print('弹窗配置应用失败: $e');
}
}
// 应用存储配置
if (storage != null) {
try {
await StormyStorage.instance.initialize(
config: storage!,
registerAdapters: storage!.registerAdapters,
);
storageApplied = true;
} catch (e) {
print('存储配置应用失败: $e');
}
}
// 应用刷新配置
if (refresh != null) {
try {
StormyRefresh.instance.initialize(refresh!);
refreshApplied = true;
} catch (e) {
print('刷新配置应用失败: $e');
}
}
// 主题配置需要外部应用(ThemeProvider)
if (theme != null) {
themeApplied = true;
}
// 应用国际化配置
if (i18n != null) {
try {
if (!storageApplied) {
print('警告: I18n 依赖 Storage,但 Storage 未配置或应用失败');
}
final bucketName = (i18n!.storageBucket != null && i18n!.storageBucket!.isNotEmpty)
? i18n!.storageBucket!
: StormyStorage.instance.currentBucketName;
await StormyI18n.init(
defaultLocale: i18n!.defaultLocale,
localeResolver: () async {
final data = StormyStorage.instance.bucket(bucketName).getString(i18n!.storageKey);
if (data != null && data.isNotEmpty) {
final parts = data.split('_');
return Locale(parts[0], parts.length > 1 ? parts[1] : null);
}
return null;
},
onSave: (locale) async {
if (locale == null) {
await StormyStorage.instance.bucket(bucketName).remove(i18n!.storageKey);
} else {
final localeStr = locale.countryCode != null
? '${locale.languageCode}_${locale.countryCode}'
: locale.languageCode;
await StormyStorage.instance.bucket(bucketName).setString(i18n!.storageKey, localeStr);
}
},
);
localizationApplied = true;
} catch (e) {
print('国际化配置应用失败: $e');
}
}
return StormyConfigApplied(
networkApplied: networkApplied,
dialogApplied: dialogApplied,
storageApplied: storageApplied,
refreshApplied: refreshApplied,
themeApplied: themeApplied,
localizationApplied: localizationApplied,
sdkApplied: sdkApplied,
);
}