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(
      'MoveDown: 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 != parentElements.length - 1) {
      await builder.addDartFileEdit(file, (fileBuilder) {
        final nextWidget = parentElements[index + 1];
        final nextRange = range.node(nextWidget);
        final nextText = utils.getRangeText(nextRange);

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

        fileBuilder.addSimpleReplacement(nextRange, widgetText);
        fileBuilder.addSimpleReplacement(widgetRange, nextText);

        final lengthDelta = nextRange.length - widgetRange.length;
        final newWidgetOffset = nextRange.offset + lengthDelta;
        builder.setSelection(Position(file, newWidgetOffset));
      });
    }
  }
}