genClassFromKeys function

String genClassFromKeys(
  1. Map<String, Map<String, String>> keys, {
  2. String className = 'AppLocalization',
})

Implementation

String genClassFromKeys(
  Map<String, Map<String, String>> keys, {
  String className = 'AppLocalization',
}) {
  var keysMap = keys.isEmpty ? {} : keys.values.first;

  String localization = '';
  keysMap.forEach((key, value) {
    List<String> keyName = key.split(RegExp(r'[._-]'));
    String name = '';
    if (keyName.isNotEmpty) {
      name = keyName.first;
      keyName.removeAt(0);

      for (var element in keyName) {
        name += _capitalize(element);
      }
    }
    var matches = RegExp(r'@(\w+)').allMatches(value);
    var results = matches.map((match) => match.group(1)).toSet().toList();

    if (localization.contains(' $name ')) {
      throw Exception(
          '\n\n*** Generator found duplicate name `$name`, key `$key`. ***\n\n');
    }

    if (results.isEmpty) {
      localization += '  static String get $name => \'$key\'.tr;\n';
    } else {
      String variable = '';
      String params = '';
      for (var result in results) {
        variable += 'required String $result,\n';
        params += '\'$result\': $result,\n';
      }
      localization += '''  static String $name ({
    $variable
  }) => '$key'.tr.trParams({
    $params
  });\n''';
    }
  });
  return '''class $className {
  $localization
}
''';
}