generate static method
Implementation
static String generate(FeatureSchema schema) {
final featureName = schema.name;
final functions = schema.functions;
final camelName = FileWriter.toCamelCase(
FileWriter.toSnakeCase(featureName),
);
final stateName = '${camelName}State';
final fields = functions
.map((f) {
final responseType = ModelGenerator.getResponseModelType(f);
final baseResponseType = ModelGenerator.getBaseResponseModelType(f);
final type = f.pagination
? 'BasePaginationState<$baseResponseType>'
: 'BaseState<$responseType>';
return ' final $type ${f.name}State;';
})
.join('\n');
final constructorParams = functions
.map((f) => ' required this.${f.name}State,')
.join('\n');
final copyWithParams = functions
.map((f) {
final responseType = ModelGenerator.getResponseModelType(f);
final baseResponseType = ModelGenerator.getBaseResponseModelType(f);
final type = f.pagination
? 'BasePaginationState<$baseResponseType>'
: 'BaseState<$responseType>';
return ' $type? ${f.name}State,';
})
.join('\n');
final copyWithAssignments = functions
.map(
(f) => ' ${f.name}State: ${f.name}State ?? this.${f.name}State,',
)
.join('\n');
final initialFields = functions
.map((f) {
final responseType = ModelGenerator.getResponseModelType(f);
final baseResponseType = ModelGenerator.getBaseResponseModelType(f);
if (f.pagination) {
return ' ${f.name}State: BasePaginationState<$baseResponseType>(query: BasePagingQuery()),';
} else {
return ' ${f.name}State: BaseState<$responseType>.initial(),';
}
})
.join('\n');
return '''part of '${FileWriter.toSnakeCase(featureName)}_cubit.dart';
class $stateName {
$fields
$stateName({
$constructorParams
});
$stateName copyWith({
$copyWithParams
}) {
return $stateName(
$copyWithAssignments
);
}
factory $stateName.initial() {
return $stateName(
$initialFields
);
}
}
''';
}