diff --git a/packages/go_router_builder/CHANGELOG.md b/packages/go_router_builder/CHANGELOG.md index 8f30c0cfb61f..6f6b6ed788d9 100644 --- a/packages/go_router_builder/CHANGELOG.md +++ b/packages/go_router_builder/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.3 + +* Updates router_config to not passing itself as `extra`. + ## 1.1.2 * Adds support for Iterables, Lists and Sets in query params for TypedGoRoute. [#108437](https://github.com/flutter/flutter/issues/108437). diff --git a/packages/go_router_builder/example/lib/all_types.g.dart b/packages/go_router_builder/example/lib/all_types.g.dart index c5ab5cf392bc..61f38b7aee92 100644 --- a/packages/go_router_builder/example/lib/all_types.g.dart +++ b/packages/go_router_builder/example/lib/all_types.g.dart @@ -75,12 +75,12 @@ extension $AllTypesBaseRouteExtension on AllTypesBaseRoute { '/', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $BigIntRouteExtension on BigIntRoute { @@ -97,12 +97,12 @@ extension $BigIntRouteExtension on BigIntRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $BoolRouteExtension on BoolRoute { @@ -127,12 +127,12 @@ extension $BoolRouteExtension on BoolRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $DateTimeRouteExtension on DateTimeRoute { @@ -151,12 +151,12 @@ extension $DateTimeRouteExtension on DateTimeRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $DoubleRouteExtension on DoubleRoute { @@ -181,12 +181,12 @@ extension $DoubleRouteExtension on DoubleRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $IntRouteExtension on IntRoute { @@ -207,12 +207,12 @@ extension $IntRouteExtension on IntRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $NumRouteExtension on NumRoute { @@ -233,12 +233,12 @@ extension $NumRouteExtension on NumRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $EnumRouteExtension on EnumRoute { @@ -265,12 +265,12 @@ extension $EnumRouteExtension on EnumRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $EnhancedEnumRouteExtension on EnhancedEnumRoute { @@ -297,12 +297,12 @@ extension $EnhancedEnumRouteExtension on EnhancedEnumRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $StringRouteExtension on StringRoute { @@ -323,12 +323,12 @@ extension $StringRouteExtension on StringRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $UriRouteExtension on UriRoute { @@ -344,12 +344,12 @@ extension $UriRouteExtension on UriRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $IterableRouteExtension on IterableRoute { @@ -439,12 +439,12 @@ extension $IterableRouteExtension on IterableRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } const _$PersonDetailsEnumMap = { diff --git a/packages/go_router_builder/example/lib/main.g.dart b/packages/go_router_builder/example/lib/main.g.dart index 6f61344e9d70..ff7a23627c97 100644 --- a/packages/go_router_builder/example/lib/main.g.dart +++ b/packages/go_router_builder/example/lib/main.g.dart @@ -43,12 +43,12 @@ extension $HomeRouteExtension on HomeRoute { '/', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $FamilyRouteExtension on FamilyRoute { @@ -60,12 +60,12 @@ extension $FamilyRouteExtension on FamilyRoute { '/family/${Uri.encodeComponent(fid)}', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $PersonRouteExtension on PersonRoute { @@ -78,12 +78,12 @@ extension $PersonRouteExtension on PersonRoute { '/family/${Uri.encodeComponent(fid)}/person/${Uri.encodeComponent(pid.toString())}', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $PersonDetailsRouteExtension on PersonDetailsRoute { @@ -99,12 +99,12 @@ extension $PersonDetailsRouteExtension on PersonDetailsRoute { '/family/${Uri.encodeComponent(fid)}/person/${Uri.encodeComponent(pid.toString())}/details/${Uri.encodeComponent(_$PersonDetailsEnumMap[details]!)}', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location, extra: $extra); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location, extra: $extra); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location, extra: $extra); } const _$PersonDetailsEnumMap = { @@ -135,10 +135,10 @@ extension $LoginRouteExtension on LoginRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } diff --git a/packages/go_router_builder/example/lib/simple_example.g.dart b/packages/go_router_builder/example/lib/simple_example.g.dart index a71180d1e1d8..6f9eb6a5eef1 100644 --- a/packages/go_router_builder/example/lib/simple_example.g.dart +++ b/packages/go_router_builder/example/lib/simple_example.g.dart @@ -30,12 +30,12 @@ extension $HomeRouteExtension on HomeRoute { '/', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } extension $FamilyRouteExtension on FamilyRoute { @@ -47,10 +47,10 @@ extension $FamilyRouteExtension on FamilyRoute { '/family/${Uri.encodeComponent(familyId)}', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } diff --git a/packages/go_router_builder/lib/src/route_config.dart b/packages/go_router_builder/lib/src/route_config.dart index f9577343ab15..87087a368fe1 100644 --- a/packages/go_router_builder/lib/src/route_config.dart +++ b/packages/go_router_builder/lib/src/route_config.dart @@ -142,12 +142,14 @@ extension $_extensionName on $_className { String get location => GoRouteData.\$location($_locationArgs,$_locationQueryParams); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => + context.go(location${_extraParam != null ? ', extra: $extraFieldName' : ''}); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => + context.push(location${_extraParam != null ? ', extra: $extraFieldName' : ''}); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location${_extraParam != null ? ', extra: $extraFieldName' : ''}); } '''; @@ -188,14 +190,16 @@ GoRoute get $_routeGetterName => ${_routeDefinition()}; } } + ParameterElement? get _extraParam => _ctor.parameters + .singleWhereOrNull((ParameterElement element) => element.isExtraField); + String get _newFromState { final StringBuffer buffer = StringBuffer('=>'); if (_ctor.isConst && _ctorParams.isEmpty && _ctorQueryParams.isEmpty) { buffer.writeln('const '); } - final ParameterElement? extraParam = _ctor.parameters - .singleWhereOrNull((ParameterElement element) => element.isExtraField); + final ParameterElement? extraParam = _extraParam; buffer.writeln('$_className('); for (final ParameterElement param in [ diff --git a/packages/go_router_builder/pubspec.yaml b/packages/go_router_builder/pubspec.yaml index 1eead91f4cd8..a5fb5ae30f97 100644 --- a/packages/go_router_builder/pubspec.yaml +++ b/packages/go_router_builder/pubspec.yaml @@ -2,7 +2,7 @@ name: go_router_builder description: >- A builder that supports generated strongly-typed route helpers for package:go_router -version: 1.1.2 +version: 1.1.3 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/builder_test.dart b/packages/go_router_builder/test/builder_test.dart index 644c13f70b34..68c5a1b28aeb 100644 --- a/packages/go_router_builder/test/builder_test.dart +++ b/packages/go_router_builder/test/builder_test.dart @@ -25,6 +25,7 @@ const Set _expectedAnnotatedTests = { 'AppliedToWrongClassType', 'BadPathParam', 'ExtraMustBeOptional', + 'ExtraValueRoute', 'MissingPathParam', 'MissingPathValue', 'MissingTypeAnnotation', diff --git a/packages/go_router_builder/test/test_inputs/_go_router_builder_test_input.dart b/packages/go_router_builder/test/test_inputs/_go_router_builder_test_input.dart index c85e8e348675..abb47ad5b7d8 100644 --- a/packages/go_router_builder/test/test_inputs/_go_router_builder_test_input.dart +++ b/packages/go_router_builder/test/test_inputs/_go_router_builder_test_input.dart @@ -86,12 +86,12 @@ extension $EnumParamExtension on EnumParam { '/${Uri.encodeComponent(_$EnumTestEnumMap[y]!)}', ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } const _$EnumTestEnumMap = { @@ -138,12 +138,12 @@ extension $DefaultValueRouteExtension on DefaultValueRoute { }, ); - void go(BuildContext context) => context.go(location, extra: this); + void go(BuildContext context) => context.go(location); - void push(BuildContext context) => context.push(location, extra: this); + void push(BuildContext context) => context.push(location); void pushReplacement(BuildContext context) => - context.pushReplacement(location, extra: this); + context.pushReplacement(location); } T? _$convertMapValue( @@ -161,6 +161,49 @@ class DefaultValueRoute extends GoRouteData { final int param; } +@ShouldGenerate(r''' +GoRoute get $extraValueRoute => GoRouteData.$route( + path: '/default-value-route', + factory: $ExtraValueRouteExtension._fromState, + ); + +extension $ExtraValueRouteExtension on ExtraValueRoute { + static ExtraValueRoute _fromState(GoRouterState state) => ExtraValueRoute( + param: _$convertMapValue('param', state.queryParams, int.parse) ?? 0, + $extra: state.extra as int?, + ); + + String get location => GoRouteData.$location( + '/default-value-route', + queryParams: { + if (param != 0) 'param': param.toString(), + }, + ); + + void go(BuildContext context) => context.go(location, extra: $extra); + + void push(BuildContext context) => context.push(location, extra: $extra); + + void pushReplacement(BuildContext context) => + context.pushReplacement(location, extra: $extra); +} + +T? _$convertMapValue( + String key, + Map map, + T Function(String) converter, +) { + final value = map[key]; + return value == null ? null : converter(value); +} +''') +@TypedGoRoute(path: '/default-value-route') +class ExtraValueRoute extends GoRouteData { + ExtraValueRoute({this.param = 0, this.$extra}); + final int param; + final int? $extra; +} + @ShouldThrow( 'Default value used with a nullable type. Only non-nullable type can have a default value.', todo: 'Remove the default value or make the type non-nullable.',