diff --git a/packages/flutter/lib/src/rendering/editable.dart b/packages/flutter/lib/src/rendering/editable.dart index 0bba28fec584f574906c537263f2e89f1e2c895b..2a3cd83d17a433dc11c3b6e8d28f385b5c345e9b 100644 --- a/packages/flutter/lib/src/rendering/editable.dart +++ b/packages/flutter/lib/src/rendering/editable.dart @@ -637,7 +637,7 @@ class RenderEditable extends RenderBox with RelayoutWhenSystemFontsChangeMixin { 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 b1cd433021b7698f85b89e10f76ebb11c7cb8ad0..3c7486154204807c860dee063996b99a2032acc2 100644 --- a/packages/flutter/test/rendering/editable_test.dart +++ b/packages/flutter/test/rendering/editable_test.dart @@ -179,6 +179,30 @@ void main() { 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);