configure method

  1. @mustCallSuper
void configure(
  1. YamlMap config
)

Implementation

@mustCallSuper
void configure(YamlMap config) {
  final YamlList? yamlList = config['languages'] as YamlList?;
  if (yamlList == null || yamlList.isEmpty) {
    throw Exception(
        "At least 1 language should be added to the 'languages' section in the pubspec.yaml\n"
        '$programName\n'
        "  languages: ['en']");
  }

  final languages =
      yamlList.map((dynamic item) => item.toString()).toList(growable: false);

  final YamlList? docLanguageList = config['doc_languages'] as YamlList?;
  List<String>? docLanguages;
  if (docLanguageList != null) {
    docLanguages =
        docLanguageList.map((dynamic item) => item.toString()).toList();
  }

  var defaultLanguage = config['default_language'] as String?;
  if (defaultLanguage == null) {
    if (languages.contains('en')) {
      defaultLanguage = 'en';
    } else {
      defaultLanguage = languages[0];
    }
  }

  if (!languages.contains(defaultLanguage)) {
    throw Exception('default language is not included in the languages list');
  }

  var outputDir = config['output_path'] as String?;
  outputDir ??= defaultOutputDir;
  if (!outputDir.endsWith('/')) {
    outputDir += '/';
  }
  if (!outputDir.startsWith('lib/')) {
    throw ArgumentError('output_path should always start with lib');
  }

  var assetsDir = config['assets_path'] as String?;
  assetsDir ??= defaultAssetsDir;
  if (!assetsDir.endsWith('/')) {
    assetsDir += '/';
  }
  var localeAssetsDir = config['locale_assets_path'] as String?;
  localeAssetsDir ??= defaultLocaleAssetsDir;
  if (!localeAssetsDir.endsWith('/')) {
    localeAssetsDir += '/';
  }

  this.localeAssetsDir = localeAssetsDir;
  this.outputDir = outputDir;
  this.assetsDir = assetsDir;
  this.languages = languages;
  this.defaultLanguage = defaultLanguage;
  this.docLanguages = docLanguages ?? languages;

  final different =
      this.docLanguages.where((language) => !languages.contains(language));
  if (different.isNotEmpty) {
    throw Exception(
        '$different is defined in doc_languages but they are not found in the supported languages');
  }
}