compute method
Computes the changes for this producer using builder.
This method should not modify fixKind.
Implementation
@override
Future<void> compute(ChangeBuilder builder) async {
final widgetExpr = node.findComponentExpression;
if (widgetExpr == null) {
return;
}
if (!canWrapOn(widgetExpr.typeOrThrow)) {
return;
}
var widgetSrc = utils.getNodeText(widgetExpr);
final builderElement = await sessionHelper.getClass(
noctermUri,
builderName,
);
if (builderElement == null) {
return;
}
final params = ['context', ...extraBuilderParams];
await builder.addDartFileEdit(file, (builder) {
builder.addReplacement(range.node(widgetExpr), (builder) {
builder.writeReference(builderElement);
builder.writeln('(');
final indentOld = utils.getLinePrefix(widgetExpr.offset);
final indentNew1 = indentOld + utils.oneIndent;
final indentNew2 = indentOld + utils.twoIndents;
final namedParams = extraNamedParams.join(', ');
if (namedParams.isNotEmpty) {
builder.write(indentNew1);
builder.write('$namedParams: ');
builder.addSimpleLinkedEdit('variable', namedParams);
builder.writeln(',');
}
builder.write(indentNew1);
builder.writeln('builder: (${params.join(', ')}) {');
widgetSrc = utils.replaceSourceIndent(widgetSrc, indentOld, indentNew2);
builder.write(indentNew2);
builder.write('return $widgetSrc');
builder.writeln(';');
builder.write(indentNew1);
final addTrailingCommas = getCodeStyleOptions(
unitResult.file,
).addTrailingCommas;
builder.writeln('}${addTrailingCommas ? "," : ""}');
builder.write(indentOld);
builder.write(')');
});
});
}