compute method

  1. @override
Future<void> compute(
  1. ChangeBuilder builder
)
override

Computes the changes for this producer using builder.

This method should not modify fixKind.

Implementation

@override
Future<void> compute(ChangeBuilder builder) async {
  final widget = node.findComponentExpression;
  if (widget == null) {
    logError(
      'MoveUp: No component expression found at offset $selectionOffset',
    );
    return;
  }

  final parentList = widget.parent;
  if (parentList is ListLiteral) {
    final List<CollectionElement> parentElements = parentList.elements;
    final index = parentElements.indexOf(widget);
    if (index > 0) {
      await builder.addDartFileEdit(file, (fileBuilder) {
        final previousWidget = parentElements[index - 1];
        final previousRange = range.node(previousWidget);
        final previousText = utils.getRangeText(previousRange);

        final widgetRange = range.node(widget);
        final widgetText = utils.getRangeText(widgetRange);

        fileBuilder.addSimpleReplacement(previousRange, widgetText);
        fileBuilder.addSimpleReplacement(widgetRange, previousText);

        final newWidgetOffset = previousRange.offset;
        builder.setSelection(Position(file, newWidgetOffset));
      });
    }
  }
}