buildExtensions function
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;
}