buildExtensions function

String buildExtensions(
  1. Map<String, dynamic> tokens, {
  2. required BuilderConfig config,
})

Generates all extension.

Creates an extension for each token group that is not sys.

Implementation

String buildExtensions(
  Map<String, dynamic> tokens, {
  required BuilderConfig config,
}) {
  final extensions = getExtensions(tokens, config: config);

  var output = '';
  for (final entry in extensions.entries) {
    final extension = entry.value;
    final name = buildExtensionName(entry.key);
    output += '''class $name extends ThemeExtension<$name> {
  $name({\n${extension.map((e) => '    this.${e.item1}').join(',\n')},\n  });

${extension.map((e) => '  final ${e.item2.flutterType}? ${e.item1};').join('\n')}

  @override
  $name copyWith({
${extension.map((e) => '    ${e.item2.flutterType}? ${e.item1},').join('\n')}
  }) {
    return $name(
${extension.map((e) => '      ${e.item1}: ${e.item1} ?? this.${e.item1},').join('\n')}
    );
  }

  @override
  $name lerp($name? other, double t) {
    if (other is! $name) {
      return this;
    }
    return $name(
${extension.map((e) => '${indentation(level: 3)}${e.item1}: ${e.item2.parser.buildLerp(e.item1)},').join('\n')}
    );
  }
}

''';
  }

  output += '''extension GeneratedTheme on ThemeData {
${extensions.keys.map((e) {
    final extensionTypeName = buildExtensionName(e);
    final extensionVariableName = e.firstLowerCased;
    return '  $extensionTypeName? get $extensionVariableName => extension<$extensionTypeName>();';
  }).join('\n')}
}''';

  return output;
}