Open
Description
Generated extension class doesn't have blank line between members
code to generate extension class
Extension generateGoResponsiveBuildContextExtensions(List<String> names) {
return Extension(
(b) => b
..name = 'GoResponsiveBuildContextExtensions'
..on = const Reference('BuildContext')
..methods.addAll(
[
_generateGoResponsiveDataMethod(),
..._generateIsBreakpointNameMethods(names),
_generateGoResponsiveValueMethod(names),
],
),
);
}
Method _generateGoResponsiveDataMethod() {
return Method(
(p0) => p0
..lambda = true
..type = MethodType.getter
..name = 'goResponsiveData'
..returns = const Reference('GoResponsiveData')
..body = const Code('GoResponsive.of(this)'),
);
}
List<Method> _generateIsBreakpointNameMethods(List<String> names) {
var lastName = names.first;
return names
.map(
(e) => _generateIsBreakpointNameMethod(
e,
lastName,
(name) => lastName = name,
),
)
.toList();
}
Method _generateIsBreakpointNameMethod(
String name,
String lastName,
void Function(String name) callback,
) {
final capitalizeName =
name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
var condition =
'between(GoResponsiveBreakpoints.$lastName, GoResponsiveBreakpoints.$name,)';
if (name == lastName) {
condition = 'smallerOrEqualTo(GoResponsiveBreakpoints.$name)';
}
callback(name);
return Method(
(p0) => p0
..lambda = true
..type = MethodType.getter
..name = 'is$capitalizeName'
..returns = const Reference('bool')
..body = Code('goResponsiveData.$condition'),
);
}
Method _generateGoResponsiveValueMethod(List<String> names) {
final parameters = [
...names.map((e) {
return Parameter(
(p0) => p0
..named = true
..type = const Reference('T?')
..name = e,
);
}),
Parameter(
(p0) => p0
..named = true
..required = true
..type = const Reference('T')
..name = 'defaultValue',
),
];
final nameString = StringBuffer();
for (final name in names) {
final capitalizeName =
name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
nameString.writeln('''
if(is$capitalizeName) {
if ($name != null) return $name;
}
''');
}
return Method(
(p0) => p0
..name = 'goResponsiveValue'
..types.add(const Reference('T'))
..returns = const Reference('T')
..optionalParameters.addAll(parameters)
..body = Code('''
$nameString
return defaultValue;
'''),
);
}
generated extension class
extension GoResponsiveBuildContextExtensions on BuildContext {
GoResponsiveData get goResponsiveData => GoResponsive.of(this);
bool get isCompact =>
goResponsiveData.smallerOrEqualTo(GoResponsiveBreakpoints.compact);
bool get isMedium => goResponsiveData.between(
GoResponsiveBreakpoints.compact,
GoResponsiveBreakpoints.medium,
);
bool get isExpanded => goResponsiveData.between(
GoResponsiveBreakpoints.medium,
GoResponsiveBreakpoints.expanded,
);
T goResponsiveValue<T>({
T? compact,
T? medium,
T? expanded,
required T defaultValue,
}) {
if (isCompact) {
if (compact != null) return compact;
}
if (isMedium) {
if (medium != null) return medium;
}
if (isExpanded) {
if (expanded != null) return expanded;
}
return defaultValue;
}
}