Fixed an issue with FilterChip's changing size when selected due to border size. (#111916)

diff --git a/dev/tools/gen_defaults/lib/filter_chip_template.dart b/dev/tools/gen_defaults/lib/filter_chip_template.dart
index 74eaf45..1f382d1 100644
--- a/dev/tools/gen_defaults/lib/filter_chip_template.dart
+++ b/dev/tools/gen_defaults/lib/filter_chip_template.dart
@@ -57,7 +57,7 @@
     ? isEnabled
       ? ${border('$tokenGroup$variant.unselected.outline')}
       : ${border('$tokenGroup$variant.disabled.unselected.outline')}
-    : null;
+    : const BorderSide(color: Colors.transparent);
 
   @override
   IconThemeData? get iconTheme => IconThemeData(
diff --git a/packages/flutter/lib/src/material/choice_chip.dart b/packages/flutter/lib/src/material/choice_chip.dart
index e3fb880..f5358f4 100644
--- a/packages/flutter/lib/src/material/choice_chip.dart
+++ b/packages/flutter/lib/src/material/choice_chip.dart
@@ -7,6 +7,7 @@
 
 import 'chip.dart';
 import 'chip_theme.dart';
+import 'colors.dart';
 import 'debug.dart';
 import 'theme.dart';
 import 'theme_data.dart';
@@ -236,7 +237,7 @@
     ? isEnabled
       ? BorderSide(color: Theme.of(context).colorScheme.outline)
       : BorderSide(color: Theme.of(context).colorScheme.onSurface.withOpacity(0.12))
-    : null;
+    : const BorderSide(color: Colors.transparent);
 
   @override
   IconThemeData? get iconTheme => IconThemeData(
diff --git a/packages/flutter/lib/src/material/filter_chip.dart b/packages/flutter/lib/src/material/filter_chip.dart
index 808be42..77ae90a 100644
--- a/packages/flutter/lib/src/material/filter_chip.dart
+++ b/packages/flutter/lib/src/material/filter_chip.dart
@@ -7,6 +7,7 @@
 
 import 'chip.dart';
 import 'chip_theme.dart';
+import 'colors.dart';
 import 'debug.dart';
 import 'theme.dart';
 import 'theme_data.dart';
@@ -245,7 +246,7 @@
     ? isEnabled
       ? BorderSide(color: Theme.of(context).colorScheme.outline)
       : BorderSide(color: Theme.of(context).colorScheme.onSurface.withOpacity(0.12))
-    : null;
+    : const BorderSide(color: Colors.transparent);
 
   @override
   IconThemeData? get iconTheme => IconThemeData(
diff --git a/packages/flutter/test/material/filter_chip_test.dart b/packages/flutter/test/material/filter_chip_test.dart
index 47e3dce..8296876 100644
--- a/packages/flutter/test/material/filter_chip_test.dart
+++ b/packages/flutter/test/material/filter_chip_test.dart
@@ -172,4 +172,43 @@
     await tester.pumpWidget(wrapForChip(child: FilterChip(label: label, onSelected: (bool b) { }, clipBehavior: Clip.antiAlias)));
     checkChipMaterialClipBehavior(tester, Clip.antiAlias);
   });
+
+  testWidgets('M3 width should not change with selection', (WidgetTester tester) async {
+    // Regression tests for: https://github.com/flutter/flutter/issues/110645
+
+    // For the text "FilterChip" the chip should default to 175 regardless of selection.
+    const int expectedWidth = 175;
+
+    // Unselected
+    await tester.pumpWidget(MaterialApp(
+      theme: ThemeData(useMaterial3: true),
+      home: Material(
+        child: Center(
+          child: FilterChip(
+            label: const Text('FilterChip'),
+            showCheckmark: false,
+            onSelected: (bool _) {},
+         )
+        ),
+      ),
+    ));
+    expect(tester.getSize(find.byType(FilterChip)).width, expectedWidth);
+
+    // Selected
+    await tester.pumpWidget(MaterialApp(
+      theme: ThemeData(useMaterial3: true),
+      home: Material(
+        child: Center(
+            child: FilterChip(
+              label: const Text('FilterChip'),
+              showCheckmark: false,
+              selected: true,
+              onSelected: (bool _) {},
+            )
+        ),
+      ),
+    ));
+    await tester.pumpAndSettle();
+    expect(tester.getSize(find.byType(FilterChip)).width, expectedWidth);
+  });
 }