[go_router_builder]Avoid losing NullabilitySuffix for typeArguments (#5215)

fixes flutter/flutter#135591

*If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].*
diff --git a/packages/go_router_builder/CHANGELOG.md b/packages/go_router_builder/CHANGELOG.md
index 2afdfb4..1a64764 100644
--- a/packages/go_router_builder/CHANGELOG.md
+++ b/packages/go_router_builder/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.3.4
+
+* Fixes a bug of typeArguments losing NullabilitySuffix
+
 ## 2.3.3
 
 * Adds `initialLocation` for `StatefulShellBranchConfig`
diff --git a/packages/go_router_builder/lib/src/type_helpers.dart b/packages/go_router_builder/lib/src/type_helpers.dart
index bd8cc7f..b17e88b 100644
--- a/packages/go_router_builder/lib/src/type_helpers.dart
+++ b/packages/go_router_builder/lib/src/type_helpers.dart
@@ -94,7 +94,7 @@
 
 String _stateValueAccess(ParameterElement element, Set<String> pathParameters) {
   if (element.isExtraField) {
-    return 'extra as ${element.type.getDisplayString(withNullability: element.isOptional)}';
+    return 'extra as ${element.type.getDisplayString(withNullability: true)}';
   }
 
   late String access;
diff --git a/packages/go_router_builder/pubspec.yaml b/packages/go_router_builder/pubspec.yaml
index cf48de7..b53161d 100644
--- a/packages/go_router_builder/pubspec.yaml
+++ b/packages/go_router_builder/pubspec.yaml
@@ -2,7 +2,7 @@
 description: >-
   A builder that supports generated strongly-typed route helpers for
   package:go_router
-version: 2.3.3
+version: 2.3.4
 repository: https://github.com/flutter/packages/tree/main/packages/go_router_builder
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router_builder%22
 
diff --git a/packages/go_router_builder/test_inputs/required_nullable_type_arguments_extra_value.dart b/packages/go_router_builder/test_inputs/required_nullable_type_arguments_extra_value.dart
new file mode 100644
index 0000000..2d7f8a1
--- /dev/null
+++ b/packages/go_router_builder/test_inputs/required_nullable_type_arguments_extra_value.dart
@@ -0,0 +1,12 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:go_router/go_router.dart';
+
+@TypedGoRoute<RequiredNullableTypeArgumentsExtraValueRoute>(
+    path: '/default-value-route')
+class RequiredNullableTypeArgumentsExtraValueRoute extends GoRouteData {
+  RequiredNullableTypeArgumentsExtraValueRoute({required this.$extra});
+  final List<int?> $extra;
+}
diff --git a/packages/go_router_builder/test_inputs/required_nullable_type_arguments_extra_value.dart.expect b/packages/go_router_builder/test_inputs/required_nullable_type_arguments_extra_value.dart.expect
new file mode 100644
index 0000000..9877d35
--- /dev/null
+++ b/packages/go_router_builder/test_inputs/required_nullable_type_arguments_extra_value.dart.expect
@@ -0,0 +1,30 @@
+RouteBase get $requiredNullableTypeArgumentsExtraValueRoute =>
+    GoRouteData.$route(
+      path: '/default-value-route',
+      factory:
+          $RequiredNullableTypeArgumentsExtraValueRouteExtension._fromState,
+    );
+
+extension $RequiredNullableTypeArgumentsExtraValueRouteExtension
+    on RequiredNullableTypeArgumentsExtraValueRoute {
+  static RequiredNullableTypeArgumentsExtraValueRoute _fromState(
+          GoRouterState state) =>
+      RequiredNullableTypeArgumentsExtraValueRoute(
+        $extra: state.extra as List<int?>,
+      );
+
+  String get location => GoRouteData.$location(
+        '/default-value-route',
+      );
+
+  void go(BuildContext context) => context.go(location, extra: $extra);
+
+  Future<T?> push<T>(BuildContext context) =>
+      context.push<T>(location, extra: $extra);
+
+  void pushReplacement(BuildContext context) =>
+      context.pushReplacement(location, extra: $extra);
+
+  void replace(BuildContext context) =>
+      context.replace(location, extra: $extra);
+}