diff --git a/packages/go_router_builder/CHANGELOG.md b/packages/go_router_builder/CHANGELOG.md index 344e81a2339..1ba9a69dbaf 100644 --- a/packages/go_router_builder/CHANGELOG.md +++ b/packages/go_router_builder/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.3.1 + +- Fixes warnings in generated code of iterable parameters. + ## 3.3.0 - Adds support for `TypedRelativeGoRoute`. 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 e9aa673fc5c..99fa26729fd 100644 --- a/packages/go_router_builder/example/lib/all_types.g.dart +++ b/packages/go_router_builder/example/lib/all_types.g.dart @@ -92,8 +92,9 @@ mixin _$AllTypesBaseRoute on GoRouteData { mixin _$BigIntRoute on GoRouteData { static BigIntRoute _fromState(GoRouterState state) => BigIntRoute( - requiredBigIntField: - BigInt.parse(state.pathParameters['requiredBigIntField']!)!, + requiredBigIntField: BigInt.parse( + state.pathParameters['requiredBigIntField']!, + ), bigIntField: _$convertMapValue( 'big-int-field', state.uri.queryParameters, @@ -128,8 +129,9 @@ mixin _$BigIntRoute on GoRouteData { mixin _$BoolRoute on GoRouteData { static BoolRoute _fromState(GoRouterState state) => BoolRoute( - requiredBoolField: - _$boolConverter(state.pathParameters['requiredBoolField']!)!, + requiredBoolField: _$boolConverter( + state.pathParameters['requiredBoolField']!, + ), boolField: _$convertMapValue( 'bool-field', state.uri.queryParameters, @@ -173,8 +175,9 @@ mixin _$BoolRoute on GoRouteData { mixin _$DateTimeRoute on GoRouteData { static DateTimeRoute _fromState(GoRouterState state) => DateTimeRoute( - requiredDateTimeField: - DateTime.parse(state.pathParameters['requiredDateTimeField']!)!, + requiredDateTimeField: DateTime.parse( + state.pathParameters['requiredDateTimeField']!, + ), dateTimeField: _$convertMapValue( 'date-time-field', state.uri.queryParameters, @@ -209,8 +212,9 @@ mixin _$DateTimeRoute on GoRouteData { mixin _$DoubleRoute on GoRouteData { static DoubleRoute _fromState(GoRouterState state) => DoubleRoute( - requiredDoubleField: - double.parse(state.pathParameters['requiredDoubleField']!)!, + requiredDoubleField: double.parse( + state.pathParameters['requiredDoubleField']!, + ), doubleField: _$convertMapValue( 'double-field', state.uri.queryParameters, @@ -255,7 +259,7 @@ mixin _$DoubleRoute on GoRouteData { mixin _$IntRoute on GoRouteData { static IntRoute _fromState(GoRouterState state) => IntRoute( - requiredIntField: int.parse(state.pathParameters['requiredIntField']!)!, + requiredIntField: int.parse(state.pathParameters['requiredIntField']!), intField: _$convertMapValue( 'int-field', state.uri.queryParameters, @@ -299,7 +303,7 @@ mixin _$IntRoute on GoRouteData { mixin _$NumRoute on GoRouteData { static NumRoute _fromState(GoRouterState state) => NumRoute( - requiredNumField: num.parse(state.pathParameters['requiredNumField']!)!, + requiredNumField: num.parse(state.pathParameters['requiredNumField']!), numField: _$convertMapValue( 'num-field', state.uri.queryParameters, @@ -487,7 +491,7 @@ mixin _$StringRoute on GoRouteData { mixin _$UriRoute on GoRouteData { static UriRoute _fromState(GoRouterState state) => UriRoute( - requiredUriField: Uri.parse(state.pathParameters['requiredUriField']!)!, + requiredUriField: Uri.parse(state.pathParameters['requiredUriField']!), uriField: _$convertMapValue( 'uri-field', state.uri.queryParameters, @@ -522,110 +526,83 @@ mixin _$UriRoute on GoRouteData { mixin _$IterableRoute on GoRouteData { static IterableRoute _fromState(GoRouterState state) => IterableRoute( intIterableField: - (state.uri.queryParametersAll['int-iterable-field'] - ?.map(int.parse) - .cast() - as Iterable?), + state.uri.queryParametersAll['int-iterable-field'] + ?.map(int.parse) + .cast(), doubleIterableField: - (state.uri.queryParametersAll['double-iterable-field'] - ?.map(double.parse) - .cast() - as Iterable?), - stringIterableField: (state.uri.queryParametersAll['string-iterable-field'] - ?.map((e) => e)), + state.uri.queryParametersAll['double-iterable-field'] + ?.map(double.parse) + .cast(), + stringIterableField: state.uri.queryParametersAll['string-iterable-field'] + ?.map((e) => e), boolIterableField: - (state.uri.queryParametersAll['bool-iterable-field'] - ?.map(_$boolConverter) - .cast() - as Iterable?), + state.uri.queryParametersAll['bool-iterable-field'] + ?.map(_$boolConverter) + .cast(), enumIterableField: - (state.uri.queryParametersAll['enum-iterable-field'] - ?.map(_$SportDetailsEnumMap._$fromName) - .cast() - as Iterable?), + state.uri.queryParametersAll['enum-iterable-field'] + ?.map(_$SportDetailsEnumMap._$fromName) + .cast(), enumOnlyInIterableField: - (state.uri.queryParametersAll['enum-only-in-iterable-field'] - ?.map(_$CookingRecipeEnumMap._$fromName) - .cast() - as Iterable?), + state.uri.queryParametersAll['enum-only-in-iterable-field'] + ?.map(_$CookingRecipeEnumMap._$fromName) + .cast(), intListField: - (state.uri.queryParametersAll['int-list-field'] - ?.map(int.parse) - .cast() - ?.toList() - as List?) - ?.toList(), + state.uri.queryParametersAll['int-list-field'] + ?.map(int.parse) + .cast() + .toList(), doubleListField: - (state.uri.queryParametersAll['double-list-field'] - ?.map(double.parse) - .cast() - ?.toList() - as List?) - ?.toList(), + state.uri.queryParametersAll['double-list-field'] + ?.map(double.parse) + .cast() + .toList(), stringListField: - (state.uri.queryParametersAll['string-list-field']?.map( - (e) => e, - ))?.toList(), + state.uri.queryParametersAll['string-list-field'] + ?.map((e) => e) + .toList(), boolListField: - (state.uri.queryParametersAll['bool-list-field'] - ?.map(_$boolConverter) - .cast() - ?.toList() - as List?) - ?.toList(), + state.uri.queryParametersAll['bool-list-field'] + ?.map(_$boolConverter) + .cast() + .toList(), enumListField: - (state.uri.queryParametersAll['enum-list-field'] - ?.map(_$SportDetailsEnumMap._$fromName) - .cast() - ?.toList() - as List?) - ?.toList(), + state.uri.queryParametersAll['enum-list-field'] + ?.map(_$SportDetailsEnumMap._$fromName) + .cast() + .toList(), enumOnlyInListField: - (state.uri.queryParametersAll['enum-only-in-list-field'] - ?.map(_$CookingRecipeEnumMap._$fromName) - .cast() - ?.toList() - as List?) - ?.toList(), + state.uri.queryParametersAll['enum-only-in-list-field'] + ?.map(_$CookingRecipeEnumMap._$fromName) + .cast() + .toList(), intSetField: - (state.uri.queryParametersAll['int-set-field'] - ?.map(int.parse) - .cast() - ?.toSet() - as Set?) - ?.toSet(), + state.uri.queryParametersAll['int-set-field'] + ?.map(int.parse) + .cast() + .toSet(), doubleSetField: - (state.uri.queryParametersAll['double-set-field'] - ?.map(double.parse) - .cast() - ?.toSet() - as Set?) - ?.toSet(), + state.uri.queryParametersAll['double-set-field'] + ?.map(double.parse) + .cast() + .toSet(), stringSetField: - (state.uri.queryParametersAll['string-set-field']?.map( - (e) => e, - ))?.toSet(), + state.uri.queryParametersAll['string-set-field']?.map((e) => e).toSet(), boolSetField: - (state.uri.queryParametersAll['bool-set-field'] - ?.map(_$boolConverter) - .cast() - ?.toSet() - as Set?) - ?.toSet(), + state.uri.queryParametersAll['bool-set-field'] + ?.map(_$boolConverter) + .cast() + .toSet(), enumSetField: - (state.uri.queryParametersAll['enum-set-field'] - ?.map(_$SportDetailsEnumMap._$fromName) - .cast() - ?.toSet() - as Set?) - ?.toSet(), + state.uri.queryParametersAll['enum-set-field'] + ?.map(_$SportDetailsEnumMap._$fromName) + .cast() + .toSet(), enumOnlyInSetField: - (state.uri.queryParametersAll['enum-only-in-set-field'] - ?.map(_$CookingRecipeEnumMap._$fromName) - .cast() - ?.toSet() - as Set?) - ?.toSet(), + state.uri.queryParametersAll['enum-only-in-set-field'] + ?.map(_$CookingRecipeEnumMap._$fromName) + .cast() + .toSet(), ); IterableRoute get _self => this as IterableRoute; @@ -718,107 +695,87 @@ mixin _$IterableRouteWithDefaultValues on GoRouteData { static IterableRouteWithDefaultValues _fromState(GoRouterState state) => IterableRouteWithDefaultValues( intIterableField: - (state.uri.queryParametersAll['int-iterable-field'] - ?.map(int.parse) - .cast() - as Iterable?) ?? + state.uri.queryParametersAll['int-iterable-field'] + ?.map(int.parse) + .cast() ?? const [0], doubleIterableField: - (state.uri.queryParametersAll['double-iterable-field'] - ?.map(double.parse) - .cast() - as Iterable?) ?? + state.uri.queryParametersAll['double-iterable-field'] + ?.map(double.parse) + .cast() ?? const [0, 1, 2], stringIterableField: - (state.uri.queryParametersAll['string-iterable-field']?.map( + state.uri.queryParametersAll['string-iterable-field']?.map( (e) => e, - )) ?? + ) ?? const ['defaultValue'], boolIterableField: - (state.uri.queryParametersAll['bool-iterable-field'] - ?.map(_$boolConverter) - .cast() - as Iterable?) ?? + state.uri.queryParametersAll['bool-iterable-field'] + ?.map(_$boolConverter) + .cast() ?? const [false], enumIterableField: - (state.uri.queryParametersAll['enum-iterable-field'] - ?.map(_$SportDetailsEnumMap._$fromName) - .cast() - as Iterable?) ?? + state.uri.queryParametersAll['enum-iterable-field'] + ?.map(_$SportDetailsEnumMap._$fromName) + .cast() ?? const [SportDetails.tennis, SportDetails.hockey], intListField: - (state.uri.queryParametersAll['int-list-field'] - ?.map(int.parse) - .cast() - ?.toList() - as List?) - ?.toList() ?? + state.uri.queryParametersAll['int-list-field'] + ?.map(int.parse) + .cast() + .toList() ?? const [0], doubleListField: - (state.uri.queryParametersAll['double-list-field'] - ?.map(double.parse) - .cast() - ?.toList() - as List?) - ?.toList() ?? + state.uri.queryParametersAll['double-list-field'] + ?.map(double.parse) + .cast() + .toList() ?? const [1, 2, 3], stringListField: - (state.uri.queryParametersAll['string-list-field']?.map( - (e) => e, - ))?.toList() ?? + state.uri.queryParametersAll['string-list-field'] + ?.map((e) => e) + .toList() ?? const ['defaultValue0', 'defaultValue1'], boolListField: - (state.uri.queryParametersAll['bool-list-field'] - ?.map(_$boolConverter) - .cast() - ?.toList() - as List?) - ?.toList() ?? + state.uri.queryParametersAll['bool-list-field'] + ?.map(_$boolConverter) + .cast() + .toList() ?? const [true], enumListField: - (state.uri.queryParametersAll['enum-list-field'] - ?.map(_$SportDetailsEnumMap._$fromName) - .cast() - ?.toList() - as List?) - ?.toList() ?? + state.uri.queryParametersAll['enum-list-field'] + ?.map(_$SportDetailsEnumMap._$fromName) + .cast() + .toList() ?? const [SportDetails.football], intSetField: - (state.uri.queryParametersAll['int-set-field'] - ?.map(int.parse) - .cast() - ?.toSet() - as Set?) - ?.toSet() ?? + state.uri.queryParametersAll['int-set-field'] + ?.map(int.parse) + .cast() + .toSet() ?? const {0, 1}, doubleSetField: - (state.uri.queryParametersAll['double-set-field'] - ?.map(double.parse) - .cast() - ?.toSet() - as Set?) - ?.toSet() ?? + state.uri.queryParametersAll['double-set-field'] + ?.map(double.parse) + .cast() + .toSet() ?? const {}, stringSetField: - (state.uri.queryParametersAll['string-set-field']?.map( - (e) => e, - ))?.toSet() ?? + state.uri.queryParametersAll['string-set-field'] + ?.map((e) => e) + .toSet() ?? const {'defaultValue'}, boolSetField: - (state.uri.queryParametersAll['bool-set-field'] - ?.map(_$boolConverter) - .cast() - ?.toSet() - as Set?) - ?.toSet() ?? + state.uri.queryParametersAll['bool-set-field'] + ?.map(_$boolConverter) + .cast() + .toSet() ?? const {true, false}, enumSetField: - (state.uri.queryParametersAll['enum-set-field'] - ?.map(_$SportDetailsEnumMap._$fromName) - .cast() - ?.toSet() - as Set?) - ?.toSet() ?? + state.uri.queryParametersAll['enum-set-field'] + ?.map(_$SportDetailsEnumMap._$fromName) + .cast() + .toSet() ?? const {SportDetails.hockey}, ); diff --git a/packages/go_router_builder/example/lib/main.g.dart b/packages/go_router_builder/example/lib/main.g.dart index 99786802ebf..e5d10a26fb2 100644 --- a/packages/go_router_builder/example/lib/main.g.dart +++ b/packages/go_router_builder/example/lib/main.g.dart @@ -84,7 +84,7 @@ mixin _$FamilyRoute on GoRouteData { mixin _$PersonRoute on GoRouteData { static PersonRoute _fromState(GoRouterState state) => PersonRoute( state.pathParameters['fid']!, - int.parse(state.pathParameters['pid']!)!, + int.parse(state.pathParameters['pid']!), ); PersonRoute get _self => this as PersonRoute; @@ -112,7 +112,7 @@ mixin _$PersonDetailsRoute on GoRouteData { static PersonDetailsRoute _fromState(GoRouterState state) => PersonDetailsRoute( state.pathParameters['fid']!, - int.parse(state.pathParameters['pid']!)!, + int.parse(state.pathParameters['pid']!), _$PersonDetailsEnumMap._$fromName(state.pathParameters['details']!)!, $extra: state.extra as int?, ); @@ -148,7 +148,7 @@ const _$PersonDetailsEnumMap = { mixin _$FamilyCountRoute on GoRouteData { static FamilyCountRoute _fromState(GoRouterState state) => - FamilyCountRoute(int.parse(state.pathParameters['count']!)!); + FamilyCountRoute(int.parse(state.pathParameters['count']!)); FamilyCountRoute get _self => this as FamilyCountRoute; diff --git a/packages/go_router_builder/example/lib/readme_excerpts.g.dart b/packages/go_router_builder/example/lib/readme_excerpts.g.dart index 878f8027153..9b7225f7eb9 100644 --- a/packages/go_router_builder/example/lib/readme_excerpts.g.dart +++ b/packages/go_router_builder/example/lib/readme_excerpts.g.dart @@ -174,7 +174,7 @@ RouteBase get $hotdogRouteWithEverything => GoRouteData.$route( mixin _$HotdogRouteWithEverything on GoRouteData { static HotdogRouteWithEverything _fromState(GoRouterState state) => HotdogRouteWithEverything( - _$boolConverter(state.pathParameters['ketchup']!)!, + _$boolConverter(state.pathParameters['ketchup']!), state.uri.queryParameters['mustard'], state.extra as Sauce, ); diff --git a/packages/go_router_builder/example/lib/shell_route_with_keys_example.g.dart b/packages/go_router_builder/example/lib/shell_route_with_keys_example.g.dart index b3cb84bd5b8..3687993d37b 100644 --- a/packages/go_router_builder/example/lib/shell_route_with_keys_example.g.dart +++ b/packages/go_router_builder/example/lib/shell_route_with_keys_example.g.dart @@ -77,7 +77,7 @@ mixin _$UsersRouteData on GoRouteData { mixin _$UserRouteData on GoRouteData { static UserRouteData _fromState(GoRouterState state) => - UserRouteData(id: int.parse(state.pathParameters['id']!)!); + UserRouteData(id: int.parse(state.pathParameters['id']!)); UserRouteData get _self => this as UserRouteData; diff --git a/packages/go_router_builder/example/lib/shell_route_with_observers_example.g.dart b/packages/go_router_builder/example/lib/shell_route_with_observers_example.g.dart index caa853af7a1..88d3b84b9a6 100644 --- a/packages/go_router_builder/example/lib/shell_route_with_observers_example.g.dart +++ b/packages/go_router_builder/example/lib/shell_route_with_observers_example.g.dart @@ -73,7 +73,7 @@ mixin _$UsersRouteData on GoRouteData { mixin _$UserRouteData on GoRouteData { static UserRouteData _fromState(GoRouterState state) => - UserRouteData(id: int.parse(state.pathParameters['id']!)!); + UserRouteData(id: int.parse(state.pathParameters['id']!)); UserRouteData get _self => this as UserRouteData; diff --git a/packages/go_router_builder/lib/src/type_helpers.dart b/packages/go_router_builder/lib/src/type_helpers.dart index 6741e21ad4f..294e1d325dd 100644 --- a/packages/go_router_builder/lib/src/type_helpers.dart +++ b/packages/go_router_builder/lib/src/type_helpers.dart @@ -468,24 +468,12 @@ class _TypeHelperIterable extends _TypeHelperWithHelper { // get a type converter for values in iterable String entriesTypeDecoder = '(e) => e'; String convertToNotNull = ''; - String formatIterableType = ''; - String asParameterType = ' as ${parameterElement.type}'; - - if (parameterElement.hasDefaultValue) { - asParameterType += '?'; - } for (final _TypeHelper helper in _helpers) { if (helper._matchesType(iterableType) && helper is _TypeHelperWithHelper) { if (!iterableType.isNullableType) { - if (parameterElement.type.isDartCoreList) { - formatIterableType = '?.toList()'; - } else if (parameterElement.type.isDartCoreSet) { - formatIterableType = '?.toSet()'; - } - convertToNotNull = - '.cast<$iterableType>()$formatIterableType$asParameterType'; + convertToNotNull = '.cast<$iterableType>()'; } entriesTypeDecoder = helper.helperName(iterableType); } @@ -497,7 +485,7 @@ class _TypeHelperIterable extends _TypeHelperWithHelper { if (const TypeChecker.fromRuntime( List, ).isAssignableFromType(parameterElement.type)) { - iterableCaster += '?.toList()'; + iterableCaster += '.toList()'; if (!parameterElement.type.isNullableType && !parameterElement.hasDefaultValue) { fallBack = '?? const []'; @@ -505,7 +493,7 @@ class _TypeHelperIterable extends _TypeHelperWithHelper { } else if (const TypeChecker.fromRuntime( Set, ).isAssignableFromType(parameterElement.type)) { - iterableCaster += '?.toSet()'; + iterableCaster += '.toSet()'; if (!parameterElement.type.isNullableType && !parameterElement.hasDefaultValue) { fallBack = '?? const {}'; @@ -513,9 +501,9 @@ class _TypeHelperIterable extends _TypeHelperWithHelper { } return ''' -(state.uri.queryParametersAll[ +state.uri.queryParametersAll[ ${escapeDartString(parameterElement.displayName.kebab)}] - ?.map($entriesTypeDecoder)$convertToNotNull)$iterableCaster$fallBack'''; + ?.map($entriesTypeDecoder)$convertToNotNull$iterableCaster$fallBack'''; } return ''' state.uri.queryParametersAll[${escapeDartString(parameterElement.displayName.kebab)}]'''; @@ -572,14 +560,21 @@ abstract class _TypeHelperWithHelper extends _TypeHelper { 'state.uri.queryParameters, ' '${helperName(paramType)})'; } + + final String nullableSuffix = + paramType.isNullableType || + (paramType.isEnum && !paramType.isNullableType) + ? '!' + : ''; + return '${helperName(paramType)}' - '(state.${_stateValueAccess(parameterElement, pathParameters)} ${!parameterElement.isRequired ? " ?? '' " : ''})!'; + '(state.${_stateValueAccess(parameterElement, pathParameters)} ${!parameterElement.isRequired ? " ?? '' " : ''})$nullableSuffix'; } } /// Extension helpers on [DartType]. extension DartTypeExtension on DartType { - /// Convenient helper for nullability checks. + /// Convenient helper for nullability checks.parameterElement.isRequired String get ensureNotNull => isNullableType ? '!' : ''; } diff --git a/packages/go_router_builder/pubspec.yaml b/packages/go_router_builder/pubspec.yaml index 801facafad4..cfcb00adbde 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: 3.3.0 +version: 3.3.1 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 @@ -23,7 +23,7 @@ dependencies: dev_dependencies: build_test: ^3.3.0 - dart_style: '>=2.3.7 <4.0.0' + dart_style: ">=2.3.7 <4.0.0" flutter: sdk: flutter go_router: ^16.2.0 diff --git a/packages/go_router_builder/test_inputs/iterable_with_default_value.dart.expect b/packages/go_router_builder/test_inputs/iterable_with_default_value.dart.expect index 35e4cb75fb5..dfec9129769 100644 --- a/packages/go_router_builder/test_inputs/iterable_with_default_value.dart.expect +++ b/packages/go_router_builder/test_inputs/iterable_with_default_value.dart.expect @@ -6,10 +6,9 @@ RouteBase get $iterableDefaultValueRoute => GoRouteData.$route( mixin _$IterableDefaultValueRoute on GoRouteData { static IterableDefaultValueRoute _fromState(GoRouterState state) => IterableDefaultValueRoute( - param: (state.uri.queryParametersAll['param'] - ?.map(int.parse) - .cast() as Iterable?) ?? - const [0], + param: + state.uri.queryParametersAll['param']?.map(int.parse).cast() ?? + const [0], ); IterableDefaultValueRoute get _self => this as IterableDefaultValueRoute; diff --git a/packages/go_router_builder/test_inputs/iterable_with_enum.dart.expect b/packages/go_router_builder/test_inputs/iterable_with_enum.dart.expect index ef7fd9fec7c..185e61cbd65 100644 --- a/packages/go_router_builder/test_inputs/iterable_with_enum.dart.expect +++ b/packages/go_router_builder/test_inputs/iterable_with_enum.dart.expect @@ -6,10 +6,9 @@ RouteBase get $iterableWithEnumRoute => GoRouteData.$route( mixin _$IterableWithEnumRoute on GoRouteData { static IterableWithEnumRoute _fromState(GoRouterState state) => IterableWithEnumRoute( - param: (state.uri.queryParametersAll['param'] - ?.map(_$EnumOnlyUsedInIterableEnumMap._$fromName) - .cast() - as Iterable?), + param: state.uri.queryParametersAll['param'] + ?.map(_$EnumOnlyUsedInIterableEnumMap._$fromName) + .cast(), ); IterableWithEnumRoute get _self => this as IterableWithEnumRoute; diff --git a/packages/go_router_builder/test_inputs/list.dart.expect b/packages/go_router_builder/test_inputs/list.dart.expect index abe23c4c4f1..f3c39bbea0b 100644 --- a/packages/go_router_builder/test_inputs/list.dart.expect +++ b/packages/go_router_builder/test_inputs/list.dart.expect @@ -5,23 +5,20 @@ RouteBase get $listRoute => GoRouteData.$route( mixin _$ListRoute on GoRouteData { static ListRoute _fromState(GoRouterState state) => ListRoute( - ids: (state.uri.queryParametersAll['ids'] - ?.map(int.parse) - .cast() - ?.toList() as List) - ?.toList() ?? + ids: state.uri.queryParametersAll['ids'] + ?.map(int.parse) + .cast() + .toList() ?? const [], - nullableIds: (state.uri.queryParametersAll['nullable-ids'] + nullableIds: state.uri.queryParametersAll['nullable-ids'] + ?.map(int.parse) + .cast() + .toList(), + idsWithDefaultValue: state + .uri.queryParametersAll['ids-with-default-value'] ?.map(int.parse) .cast() - ?.toList() as List?) - ?.toList(), - idsWithDefaultValue: (state - .uri.queryParametersAll['ids-with-default-value'] - ?.map(int.parse) - .cast() - ?.toList() as List?) - ?.toList() ?? + .toList() ?? const [0], ); diff --git a/packages/go_router_builder/test_inputs/parameter_generates_a_warning.dart b/packages/go_router_builder/test_inputs/parameter_generates_a_warning.dart new file mode 100644 index 00000000000..18081cdfd1a --- /dev/null +++ b/packages/go_router_builder/test_inputs/parameter_generates_a_warning.dart @@ -0,0 +1,14 @@ +// 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(path: '/product/:id') +class MyRoute extends GoRouteData with _$MyRoute { + const MyRoute(this.id); + final int id; +} + +// avoid error when run analytic +mixin _$MyRoute {} diff --git a/packages/go_router_builder/test_inputs/parameter_generates_a_warning.dart.expect b/packages/go_router_builder/test_inputs/parameter_generates_a_warning.dart.expect new file mode 100644 index 00000000000..ea0ba9d2c99 --- /dev/null +++ b/packages/go_router_builder/test_inputs/parameter_generates_a_warning.dart.expect @@ -0,0 +1,30 @@ +RouteBase get $myRoute => GoRouteData.$route( + path: '/product/:id', + factory: _$MyRoute._fromState, + ); + +mixin _$MyRoute on GoRouteData { + static MyRoute _fromState(GoRouterState state) => MyRoute( + int.parse(state.pathParameters['id']!), + ); + + MyRoute get _self => this as MyRoute; + + @override + String get location => GoRouteData.$location( + '/product/${Uri.encodeComponent(_self.id.toString())}', + ); + + @override + void go(BuildContext context) => context.go(location); + + @override + Future push(BuildContext context) => context.push(location); + + @override + void pushReplacement(BuildContext context) => + context.pushReplacement(location); + + @override + void replace(BuildContext context) => context.replace(location); +} \ No newline at end of file diff --git a/packages/go_router_builder/test_inputs/required_query_parameter.dart.expect b/packages/go_router_builder/test_inputs/required_query_parameter.dart.expect index 23487d96d6e..1aa70667195 100644 --- a/packages/go_router_builder/test_inputs/required_query_parameter.dart.expect +++ b/packages/go_router_builder/test_inputs/required_query_parameter.dart.expect @@ -6,7 +6,7 @@ RouteBase get $nonNullableRequiredParamNotInPath => GoRouteData.$route( mixin _$NonNullableRequiredParamNotInPath on GoRouteData { static NonNullableRequiredParamNotInPath _fromState(GoRouterState state) => NonNullableRequiredParamNotInPath( - id: int.parse(state.uri.queryParameters['id']!)!, + id: int.parse(state.uri.queryParameters['id']!), ); NonNullableRequiredParamNotInPath get _self => diff --git a/packages/go_router_builder/test_inputs/set.dart.expect b/packages/go_router_builder/test_inputs/set.dart.expect index 69d25393d59..a8decd72730 100644 --- a/packages/go_router_builder/test_inputs/set.dart.expect +++ b/packages/go_router_builder/test_inputs/set.dart.expect @@ -5,23 +5,20 @@ RouteBase get $setRoute => GoRouteData.$route( mixin _$SetRoute on GoRouteData { static SetRoute _fromState(GoRouterState state) => SetRoute( - ids: (state.uri.queryParametersAll['ids'] - ?.map(int.parse) - .cast() - ?.toSet() as Set) - ?.toSet() ?? + ids: state.uri.queryParametersAll['ids'] + ?.map(int.parse) + .cast() + .toSet() ?? const {}, - nullableIds: (state.uri.queryParametersAll['nullable-ids'] + nullableIds: state.uri.queryParametersAll['nullable-ids'] + ?.map(int.parse) + .cast() + .toSet(), + idsWithDefaultValue: state + .uri.queryParametersAll['ids-with-default-value'] ?.map(int.parse) .cast() - ?.toSet() as Set?) - ?.toSet(), - idsWithDefaultValue: (state - .uri.queryParametersAll['ids-with-default-value'] - ?.map(int.parse) - .cast() - ?.toSet() as Set?) - ?.toSet() ?? + .toSet() ?? const {0}, );