tokenize method

DuitTheme tokenize(
  1. Map<String, dynamic> theme
)

Implementation

DuitTheme tokenize(Map<String, dynamic> theme) {
  final errors = <String>{};
  final tokens = <String, ThemeToken>{};

  for (var themeEntry in theme.entries) {
    final theme = themeEntry.value as Map<String, dynamic>;
    final themeData = theme["data"] as Map<String, dynamic>;
    final widgetType = theme["type"];

    ThemeToken token;

    if (overrideWidgetTokenizer != null) {
      final overridedToken = overrideWidgetTokenizer!(
        widgetType,
        themeData,
      );

      if (overridedToken != null) {
        token = overridedToken;
      } else {
        token = createToken(
          widgetType,
          themeData,
        );
      }
    } else {
      token = createToken(
        widgetType,
        themeData,
      );
    }

    for (var entry in themeData.entries) {
      final key = entry.key;
      if (token.excludedFields.contains(key)) {
        errors.add("Token can`t contains excluded field - |$key|");
      }
    }

    tokens[themeEntry.key] = token;
  }

  if (errors.isNotEmpty) {
    throw FormatException(errors.join("\n"));
  }

  return DuitTheme(tokens);
}