[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,
+    );
+  });
 }