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 widgetExpr = node.findComponentExpression;
  if (widgetExpr == null) {
    return;
  }

  final widgetType = widgetExpr.staticType;
  if (widgetType == null || widgetType.isExactComponentTypePadding) {
    return;
  }

  final widgetSrc = utils.getNodeText(widgetExpr);
  final parentClassElement = await sessionHelper.getClass(
    noctermUri,
    'Padding',
  );
  if (parentClassElement == null) {
    return;
  }

  await builder.addDartFileEdit(file, (builder) {
    // var eol = builder.eol;
    final keyword = widgetExpr.inConstantContext ? '' : ' const';
    final codeStyleOptions = getCodeStyleOptions(unitResult.file);
    final paddingStr = codeStyleOptions.preferIntLiterals ? '8' : '8.0';

    builder.addReplacement(range.node(widgetExpr), (builder) {
      builder.writeReference(parentClassElement);
      builder.write('(');
      builder.writeln();
      final indentNew =
          '${utils.getLinePrefix(widgetExpr.offset)}${utils.oneIndent}';
      builder.write(indentNew);
      builder.write('padding:$keyword EdgeInsets.all($paddingStr),');
      builder.writeln();
      builder.write(utils.getLinePrefix(widgetExpr.offset));
      builder.write('child: ');
      builder.write(widgetSrc);
      builder.write(')');
    });
  });
}