Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/go_router_builder/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 4.1.1

- Allow `analyzer: '>=7.4.0 <9.0.0'`.
- Allow `build: '>=3.0.0 <5.0.0'`.
- Allow `source_gen: '>=3.1.0 <5.0.0'`.

## 4.1.0

- Adds support for classes that support fromJson/toJson. [#117261](https://github.com/flutter/flutter/issues/117261)
Expand Down
4 changes: 2 additions & 2 deletions packages/go_router_builder/lib/src/route_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ abstract class RouteBaseConfig {
}) {
assert(!reader.isNull, 'reader should not be null');
final InterfaceType type = reader.objectValue.type! as InterfaceType;
final String typeName = type.element.name;
final String typeName = type.element.displayName;

if (isAncestorRelative && typeName == 'TypedGoRoute') {
throw InvalidGenerationSourceError(
Expand Down Expand Up @@ -942,7 +942,7 @@ $routeDataClassName.$dataConvertionFunctionName(
String _enumMapConst(InterfaceType type) {
assert(type.isEnum);

final String enumName = type.element.name;
final String enumName = type.element.displayName;

final StringBuffer buffer = StringBuffer('const ${enumMapName(type)} = {');

Expand Down
46 changes: 29 additions & 17 deletions packages/go_router_builder/lib/src/type_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,11 @@ String compareField(
}

/// Gets the name of the `const` map generated to help encode [Enum] types.
String enumMapName(InterfaceType type) => '_\$${type.element.name}EnumMap';
String enumMapName(InterfaceType type) =>
'_\$${type.element.displayName}EnumMap';

/// Gets the name of the `const` map generated to help encode [Json] types.
String jsonMapName(InterfaceType type) => type.element.name;
String jsonMapName(InterfaceType type) => type.element.displayName;

String _stateValueAccess(
FormalParameterElement element,
Expand Down Expand Up @@ -302,8 +303,10 @@ class _TypeHelperBigInt extends _TypeHelperWithHelper {
);

@override
bool _matchesType(DartType type) =>
const TypeChecker.fromRuntime(BigInt).isAssignableFromType(type);
bool _matchesType(DartType type) => const TypeChecker.typeNamed(
BigInt,
inSdk: true,
).isAssignableFromType(type);
}

class _TypeHelperBool extends _TypeHelperWithHelper {
Expand Down Expand Up @@ -342,8 +345,10 @@ class _TypeHelperDateTime extends _TypeHelperWithHelper {
);

@override
bool _matchesType(DartType type) =>
const TypeChecker.fromRuntime(DateTime).isAssignableFromType(type);
bool _matchesType(DartType type) => const TypeChecker.typeNamed(
DateTime,
inSdk: true,
).isAssignableFromType(type);
}

class _TypeHelperDouble extends _TypeHelperWithHelper {
Expand Down Expand Up @@ -472,14 +477,17 @@ class _TypeHelperExtensionType extends _TypeHelper {
representationType.isDartCoreNum ||
representationType.isDartCoreBool ||
representationType.isEnum ||
const TypeChecker.fromRuntime(
const TypeChecker.typeNamed(
BigInt,
inSdk: true,
).isAssignableFromType(representationType) ||
const TypeChecker.fromRuntime(
const TypeChecker.typeNamed(
DateTime,
inSdk: true,
).isAssignableFromType(representationType) ||
const TypeChecker.fromRuntime(
const TypeChecker.typeNamed(
Uri,
inSdk: true,
).isAssignableFromType(representationType);
}
}
Expand Down Expand Up @@ -566,7 +574,7 @@ class _TypeHelperUri extends _TypeHelperWithHelper {

@override
bool _matchesType(DartType type) =>
const TypeChecker.fromRuntime(Uri).isAssignableFromType(type);
const TypeChecker.typeNamed(Uri, inSdk: true).isAssignableFromType(type);
}

class _TypeHelperIterable extends _TypeHelperWithHelper {
Expand Down Expand Up @@ -606,16 +614,18 @@ class _TypeHelperIterable extends _TypeHelperWithHelper {
// get correct type for iterable
String iterableCaster = '';
String fallBack = '';
if (const TypeChecker.fromRuntime(
if (const TypeChecker.typeNamed(
List,
inSdk: true,
).isAssignableFromType(parameterElement.type)) {
iterableCaster += '.toList()';
if (!parameterElement.type.isNullableType &&
!parameterElement.hasDefaultValue) {
fallBack = '?? const []';
}
} else if (const TypeChecker.fromRuntime(
} else if (const TypeChecker.typeNamed(
Set,
inSdk: true,
).isAssignableFromType(parameterElement.type)) {
iterableCaster += '.toSet()';
if (!parameterElement.type.isNullableType &&
Expand Down Expand Up @@ -656,8 +666,10 @@ $fieldName$nullAwareAccess.map((e) => e.toString()).toList()''';
}

@override
bool _matchesType(DartType type) =>
const TypeChecker.fromRuntime(Iterable).isAssignableFromType(type);
bool _matchesType(DartType type) => const TypeChecker.typeNamed(
Iterable,
inSdk: true,
).isAssignableFromType(type);

@override
String _compare(String value1, String value2) =>
Expand Down Expand Up @@ -783,10 +795,10 @@ class _TypeHelperJson extends _TypeHelperWithHelper {
}

final FunctionType functionType = secondParam.type as FunctionType;
if (functionType.parameters.length != 1 ||
if (functionType.formalParameters.length != 1 ||
functionType.returnType.getDisplayString() !=
type.element.typeParameters.first.getDisplayString() ||
functionType.parameters[0].type.getDisplayString() != 'Object?') {
type.element.typeParameters.first.displayName ||
functionType.formalParameters[0].type.getDisplayString() != 'Object?') {
throw InvalidGenerationSourceError(
'The parameter type '
'`${type.getDisplayString(withNullability: false)}` not have a supported fromJson definition.',
Expand Down
8 changes: 4 additions & 4 deletions packages/go_router_builder/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: go_router_builder
description: >-
A builder that supports generated strongly-typed route helpers for
package:go_router
version: 4.1.0
version: 4.1.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

Expand All @@ -11,14 +11,14 @@ environment:
flutter: ">=3.29.0"

dependencies:
analyzer: ">=7.4.0 <8.0.0"
analyzer: ">=7.4.0 <9.0.0"
async: ^2.8.0
build: ^3.0.0
build: ">=3.0.0 <5.0.0"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should use ^ syntax to avoid breaking change. same for source gen

Copy link
Contributor Author

@NearTox NearTox Sep 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

when i use
analyzer: ^8.0.0
build: ^4.0.0
source_gen: ^4.0.0

the build broken due the package: test that in flutter stable is pinned to 1.26.2 (currently not supports analyzer: ^8.0.0)

Note: matcher is pinned to version 0.12.17 by flutter_test from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.

Note: test_api is pinned to version 0.7.6 by flutter_test from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.

Because test >=1.25.9 <1.26.3 depends on analyzer >=6.0.0 <8.0.0 and test >=1.21.6 <1.24.4 depends on analyzer >=2.0.0 <6.0.0,
  test >=1.21.6 <1.24.4-∞ or >=1.25.9 <1.26.3-∞ requires analyzer >=2.0.0 <6.0.0 or >=6.0.0 <8.0.0.
And because test >=1.21.0 <1.21.6 depends on analyzer >=2.0.0 <5.0.0, test >=1.21.0 <1.24.4-∞ or >=1.25.9 <1.26.3-∞ requires
  analyzer >=2.0.0 <6.0.0 or >=6.0.0 <8.0.0.

(1) So, because test >=1.24.3 <1.25.13 depends on matcher >=0.12.16 <0.12.17 and test >=1.26.3 depends on test_api 0.7.7, test
>=1.21.0 requires analyzer >=2.0.0 <6.0.0 or >=6.0.0 <8.0.0 or matcher >=0.12.16 <0.12.17 or test_api 0.7.7.

Because test >=1.17.10 <1.20.0 depends on analyzer >=1.0.0 <3.0.0 and test >=1.16.6 <1.17.10 depends on analyzer ^1.0.0, test
  >=1.16.6 <1.20.0 requires analyzer >=1.0.0 <3.0.0.
And because test >=1.20.0 <1.21.2 depends on test_api 0.4.9, test >=1.16.6 <1.21.2 requires analyzer >=1.0.0 <3.0.0 or test_api
  0.4.9.
And because test >=1.21.0 requires analyzer >=2.0.0 <6.0.0 or >=6.0.0 <8.0.0 or matcher >=0.12.16 <0.12.17 or test_api 0.7.7
  (1), test >=1.16.6 requires analyzer >=1.0.0 <6.0.0 or >=6.0.0 <8.0.0 or matcher >=0.12.16 <0.12.17 or test_api 0.4.9 or 0.7.7.

(2) So, because every version of flutter_test from sdk depends on both matcher 0.12.17 and test_api 0.7.6, if flutter_test from sdk
and test >=1.16.6 then analyzer >=1.0.0 <6.0.0 or >=6.0.0 <8.0.0.

Because no versions of source_gen match >4.0.0 <4.0.1 and source_gen >=4.0.1 depends on analyzer ^8.1.1, source_gen >4.0.0
  requires analyzer ^8.1.1.
And because source_gen 4.0.0 depends on build ^3.0.0 and every version of go_router_builder from path depends on build ^4.0.0,
  if source_gen >=4.0.0 and go_router_builder from path then analyzer ^8.1.1.
And because if flutter_test from sdk and test >=1.16.6 then analyzer >=1.0.0 <6.0.0 or >=6.0.0 <8.0.0 (2), one of flutter_test
  from sdk or test >=1.16.6 or source_gen >=4.0.0 or go_router_builder from path must be false.
And because every version of go_router_builder from path depends on source_gen ^4.0.0 and go_router_builder_example depends on
  flutter_test from sdk, test >=1.16.6 is incompatible with go_router_builder from path.
So, because go_router_builder_example depends on both go_router_builder from path and test ^1.17.0, version solving failed.

Copy link
Contributor Author

@NearTox NearTox Sep 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so as a workaround to be able to use the new version of analyzer I ended using version range
Curiously, doing this allows the installation of analyzer ^8
Additionally I think this would an intermediate version in order to be not wait until next flutter version (beta branch contains meta: 1.26.3)
additionally i wish in a near future (next flutter release) migrate away Elements2 like mentioned here PR#9649

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a note the currents checks do a test with both ranges (see Linux analyze stable)

analyzer: ^8.0.0
build: ^4.0.0
source_gen: ^4.0.0

and for downgrade (see Linux analyze_downgraded stable)

analyzer: ^7.0.0
build: ^3.0.0
source_gen: ^3.0.0

build_config: ^1.0.0
collection: ^1.14.0
meta: ^1.7.0
path: ^1.8.0
source_gen: ^3.0.0
source_gen: ">=3.1.0 <5.0.0"
source_helper: ^1.3.4

dev_dependencies:
Expand Down