Changing RenderEditable.textAlign doesn't break hot reload anymore (#44605)

diff --git a/packages/flutter/lib/src/rendering/editable.dart b/packages/flutter/lib/src/rendering/editable.dart
index 0bba28f..2a3cd83 100644
--- a/packages/flutter/lib/src/rendering/editable.dart
+++ b/packages/flutter/lib/src/rendering/editable.dart
@@ -637,7 +637,7 @@
     if (_textPainter.textAlign == value)
       return;
     _textPainter.textAlign = value;
-    markNeedsPaint();
+    markNeedsTextLayout();
   }
 
   /// The directionality of the text.
diff --git a/packages/flutter/test/rendering/editable_test.dart b/packages/flutter/test/rendering/editable_test.dart
index b1cd433..3c74861 100644
--- a/packages/flutter/test/rendering/editable_test.dart
+++ b/packages/flutter/test/rendering/editable_test.dart
@@ -179,6 +179,30 @@
     expect(editable, paintsExactlyCountTimes(#drawRRect, 0));
   }, skip: isBrowser);
 
+  test('Can change textAlign', () {
+    final TextSelectionDelegate delegate = FakeEditableTextState();
+
+    final RenderEditable editable = RenderEditable(
+      textAlign: TextAlign.start,
+      textDirection: TextDirection.ltr,
+      offset: ViewportOffset.zero(),
+      textSelectionDelegate: delegate,
+      text: const TextSpan(text: 'test'),
+      startHandleLayerLink: LayerLink(),
+      endHandleLayerLink: LayerLink(),
+    );
+
+    layout(editable);
+
+    editable.layout(BoxConstraints.loose(const Size(100, 100)));
+    expect(editable.textAlign, TextAlign.start);
+    expect(editable.debugNeedsLayout, isFalse);
+
+    editable.textAlign = TextAlign.center;
+    expect(editable.textAlign, TextAlign.center);
+    expect(editable.debugNeedsLayout, isTrue);
+  });
+
   test('Cursor with ideographic script', () {
     final TextSelectionDelegate delegate = FakeEditableTextState();
     final ValueNotifier<bool> showCursor = ValueNotifier<bool>(true);