diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart index 1c33f22b37..73a4ab02e6 100644 --- a/packages/flutter/lib/src/material/input_decorator.dart +++ b/packages/flutter/lib/src/material/input_decorator.dart @@ -1555,14 +1555,14 @@ class _RenderDecoration extends RenderBox with SlottedContainerRenderObjectMixin case TextDirection.rtl: // origin is on the right startX = labelOffset.dx + labelWidth * (1.0 - scale); floatStartX = startX; - if (prefixIcon != null && !decoration.alignLabelWithHint) { + if (prefixIcon != null && !decoration.alignLabelWithHint && isOutlineBorder) { floatStartX += material3 ? _boxSize(prefixIcon).width - contentPadding.left : 0.0; } break; case TextDirection.ltr: // origin on the left startX = labelOffset.dx; floatStartX = startX; - if (prefixIcon != null && !decoration.alignLabelWithHint) { + if (prefixIcon != null && !decoration.alignLabelWithHint && isOutlineBorder) { floatStartX += material3 ? -_boxSize(prefixIcon).width + contentPadding.left : 0.0; } break; diff --git a/packages/flutter/test/material/input_decorator_test.dart b/packages/flutter/test/material/input_decorator_test.dart index 16abd08455..fddf7ee436 100644 --- a/packages/flutter/test/material/input_decorator_test.dart +++ b/packages/flutter/test/material/input_decorator_test.dart @@ -2842,6 +2842,25 @@ void main() { expect(tester.getBottomLeft(find.text('text')).dx, 48.0); expect(getBorderWeight(tester), 2.0); }); + + testWidgets('Floating label for filled input decoration is aligned with text', (WidgetTester tester) async { + await tester.pumpWidget( + buildInputDecorator( + useMaterial3: useMaterial3, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.ac_unit), + labelText: 'label', + filled: true, + ), + isFocused: true, + ), + ); + + expect(tester.getSize(find.byType(InputDecorator)), const Size(800.0, 56.0)); + expect(tester.getTopLeft(find.text('label')).dx, 48.0); + expect(tester.getBottomLeft(find.text('text')).dx, 48.0); + expect(getBorderWeight(tester), 2.0); + }); }); group('3 point interpolation alignment', () {