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 selectionRange = SourceRange(selectionOffset, selectionLength);
final analyzer = SelectionAnalyzer(selectionRange);
unitResult.unit.accept(analyzer);
final widgetExpressions = _extractSelectedWidgetExpressions(analyzer);
if (widgetExpressions.isEmpty) {
return;
}
final firstWidget = widgetExpressions.first;
final lastWidget = widgetExpressions.last;
final selectedRange = range.startEnd(firstWidget, lastWidget);
final src = utils.getRangeText(selectedRange);
final parentClassElement = await sessionHelper.getClass(
noctermUri,
'Column',
);
if (parentClassElement == null) {
return;
}
await builder.addDartFileEdit(file, (builder) {
builder.addReplacement(selectedRange, (builder) {
builder.writeReference(parentClassElement);
builder.write('(');
final indentOld = utils.getLinePrefix(firstWidget.offset);
final indentNew1 = indentOld + utils.oneIndent;
final indentNew2 = indentOld + utils.twoIndents;
builder.writeln();
builder.write(indentNew1);
builder.write('children: [');
builder.writeln();
final newSrc = utils.replaceSourceIndent(src, indentOld, indentNew2);
builder.write(indentNew2);
builder.write(newSrc);
builder.write(',');
builder.writeln();
builder.write(indentNew1);
builder.write('],');
builder.writeln();
builder.write(indentOld);
builder.write(')');
});
});
}