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,
  );
}