[Material] Fix radio ink ripple to be centered (#28845)
diff --git a/packages/flutter/lib/src/material/radio.dart b/packages/flutter/lib/src/material/radio.dart
index 90109cf..a3077eb 100644
--- a/packages/flutter/lib/src/material/radio.dart
+++ b/packages/flutter/lib/src/material/radio.dart
@@ -214,7 +214,7 @@
void paint(PaintingContext context, Offset offset) {
final Canvas canvas = context.canvas;
- paintRadialReaction(canvas, offset, const Offset(kRadialReactionRadius, kRadialReactionRadius));
+ paintRadialReaction(canvas, offset, size.center(Offset.zero));
final Offset center = (offset & size).center;
final Color radioColor = onChanged != null ? activeColor : inactiveColor;
diff --git a/packages/flutter/test/material/radio_test.dart b/packages/flutter/test/material/radio_test.dart
index efce004..0d34fcb 100644
--- a/packages/flutter/test/material/radio_test.dart
+++ b/packages/flutter/test/material/radio_test.dart
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:io' show Platform;
import 'dart:ui';
import 'package:flutter/rendering.dart';
@@ -245,5 +246,40 @@
semantics.dispose();
SystemChannels.accessibility.setMockMessageHandler(null);
});
+
+ testWidgets('Radio ink ripple is displayed correctly', (WidgetTester tester) async {
+ final Key painterKey = UniqueKey();
+ const Key radioKey = Key('radio');
+
+ await tester.pumpWidget(MaterialApp(
+ theme: ThemeData(),
+ home: Scaffold(
+ body: RepaintBoundary(
+ key: painterKey,
+ child: Center(
+ child: Container(
+ width: 100,
+ height: 100,
+ color: Colors.white,
+ child: Radio<int>(
+ key: radioKey,
+ value: 1,
+ groupValue: 1,
+ onChanged: (int value) {},
+ ),
+ )
+ ),
+ ),
+ ),
+ ));
+
+ await tester.press(find.byKey(radioKey));
+ await tester.pumpAndSettle();
+ await expectLater(
+ find.byKey(painterKey),
+ matchesGoldenFile('radio.ink_ripple.png'),
+ skip: !Platform.isLinux,
+ );
+ });
}