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