Skip to content

Commit e2e876c

Browse files
committed
Merge remote-tracking branch 'origin/main' into not-gen-skip-hostapi
* origin/main: [image_picker] Remove MethodCall from most Android code (flutter#3438) add missing_enum_constant_in_switch (flutter#3435) [go_router_builder] Generate the enum map for enum used in iterable (flutter#3415) [pigeon] finish kotlin and swift safe cast removal (flutter#3360) [tool] Include examples when pathifying deps (flutter#3393) url change for platform interface (flutter#3323) # Conflicts: # packages/pigeon/CHANGELOG.md
2 parents bb722e4 + ce87f28 commit e2e876c

File tree

65 files changed

+1028
-716
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1028
-716
lines changed

packages/go_router_builder/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.1.6
2+
3+
* Generates the const enum map for enums used in `List`, `Set` and `Iterable`.
4+
15
## 1.1.5
26

37
* Replaces unnecessary Flutter SDK constraint with corresponding Dart

packages/go_router_builder/example/lib/all_types.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,16 +297,19 @@ class IterableRoute extends GoRouteData {
297297
this.stringIterableField,
298298
this.boolIterableField,
299299
this.enumIterableField,
300+
this.enumOnlyInIterableField,
300301
this.intListField,
301302
this.doubleListField,
302303
this.stringListField,
303304
this.boolListField,
304305
this.enumListField,
306+
this.enumOnlyInListField,
305307
this.intSetField,
306308
this.doubleSetField,
307309
this.stringSetField,
308310
this.boolSetField,
309311
this.enumSetField,
312+
this.enumOnlyInSetField,
310313
});
311314

312315
final Iterable<int>? intIterableField;
@@ -329,6 +332,10 @@ class IterableRoute extends GoRouteData {
329332
final List<SportDetails>? enumListField;
330333
final Set<SportDetails>? enumSetField;
331334

335+
final Iterable<CookingRecipe>? enumOnlyInIterableField;
336+
final List<CookingRecipe>? enumOnlyInListField;
337+
final Set<CookingRecipe>? enumOnlyInSetField;
338+
332339
@override
333340
Widget build(BuildContext context, GoRouterState state) =>
334341
const BasePage<String>(

packages/go_router_builder/example/lib/all_types.g.dart

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/go_router_builder/example/lib/shared/data.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ enum SportDetails {
5454
final bool hasNet;
5555
}
5656

57+
/// An enum used only in iterables.
58+
enum CookingRecipe {
59+
burger,
60+
pizza,
61+
tacos,
62+
}
63+
5764
/// sample Person class
5865
class Person {
5966
Person({

packages/go_router_builder/example/test/all_types_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,18 @@ void main() {
127127
expect(find.text('Query param: https://dart.dev'), findsOneWidget);
128128

129129
IterableRoute(
130+
enumIterableField: <SportDetails>[SportDetails.football],
130131
intListField: <int>[1, 2, 3],
132+
enumOnlyInSetField: <CookingRecipe>{
133+
CookingRecipe.burger,
134+
CookingRecipe.pizza,
135+
},
131136
).go(scaffoldState.context);
132137
await tester.pumpAndSettle();
133138
expect(find.text('IterableRoute'), findsOneWidget);
134139
expect(
135140
find.text(
136-
'/iterable-route?int-list-field=1&int-list-field=2&int-list-field=3'),
141+
'/iterable-route?enum-iterable-field=football&int-list-field=1&int-list-field=2&int-list-field=3&enum-only-in-set-field=burger&enum-only-in-set-field=pizza'),
137142
findsOneWidget);
138143
});
139144
}

packages/go_router_builder/lib/src/route_config.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,15 @@ GoRoute get $_routeGetterName => ${_routeDefinition()};
179179
...routeDef._ctorParams,
180180
...routeDef._ctorQueryParams,
181181
]) {
182-
if (ctorParam.type.isEnum) {
183-
enumParamTypes.add(ctorParam.type as InterfaceType);
182+
DartType potentialEnumType = ctorParam.type;
183+
if (potentialEnumType is ParameterizedType &&
184+
(ctorParam.type as ParameterizedType).typeArguments.isNotEmpty) {
185+
potentialEnumType =
186+
(ctorParam.type as ParameterizedType).typeArguments.first;
187+
}
188+
189+
if (potentialEnumType.isEnum) {
190+
enumParamTypes.add(potentialEnumType as InterfaceType);
184191
}
185192
}
186193
}

packages/go_router_builder/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: go_router_builder
22
description: >-
33
A builder that supports generated strongly-typed route helpers for
44
package:go_router
5-
version: 1.1.5
5+
version: 1.1.6
66
repository: https://github.com/flutter/packages/tree/main/packages/go_router_builder
77
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router_builder%22
88

packages/go_router_builder/test/builder_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ const Set<String> _expectedAnnotatedTests = <String>{
3535
'EnumParam',
3636
'DefaultValueRoute',
3737
'NullableDefaultValueRoute',
38+
'IterableWithEnumRoute'
3839
};

packages/go_router_builder/test/test_inputs/_go_router_builder_test_input.dart

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,57 @@ class NullableDefaultValueRoute extends GoRouteData {
213213
NullableDefaultValueRoute({this.param = 0});
214214
final int? param;
215215
}
216+
217+
@ShouldGenerate(r'''
218+
GoRoute get $iterableWithEnumRoute => GoRouteData.$route(
219+
path: '/iterable-with-enum',
220+
factory: $IterableWithEnumRouteExtension._fromState,
221+
);
222+
223+
extension $IterableWithEnumRouteExtension on IterableWithEnumRoute {
224+
static IterableWithEnumRoute _fromState(GoRouterState state) =>
225+
IterableWithEnumRoute(
226+
param: state.queryParametersAll['param']
227+
?.map(_$EnumOnlyUsedInIterableEnumMap._$fromName),
228+
);
229+
230+
String get location => GoRouteData.$location(
231+
'/iterable-with-enum',
232+
queryParams: {
233+
if (param != null)
234+
'param':
235+
param?.map((e) => _$EnumOnlyUsedInIterableEnumMap[e]).toList(),
236+
},
237+
);
238+
239+
void go(BuildContext context) => context.go(location);
240+
241+
void push(BuildContext context) => context.push(location);
242+
243+
void pushReplacement(BuildContext context) =>
244+
context.pushReplacement(location);
245+
}
246+
247+
const _$EnumOnlyUsedInIterableEnumMap = {
248+
EnumOnlyUsedInIterable.a: 'a',
249+
EnumOnlyUsedInIterable.b: 'b',
250+
EnumOnlyUsedInIterable.c: 'c',
251+
};
252+
253+
extension<T extends Enum> on Map<T, String> {
254+
T _$fromName(String value) =>
255+
entries.singleWhere((element) => element.value == value).key;
256+
}
257+
''')
258+
@TypedGoRoute<IterableWithEnumRoute>(path: '/iterable-with-enum')
259+
class IterableWithEnumRoute extends GoRouteData {
260+
IterableWithEnumRoute({this.param});
261+
262+
final Iterable<EnumOnlyUsedInIterable>? param;
263+
}
264+
265+
enum EnumOnlyUsedInIterable {
266+
a,
267+
b,
268+
c,
269+
}

packages/image_picker/image_picker_android/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.8.6+1
2+
3+
* Refactors code in preparation for adopting Pigeon.
4+
15
## 0.8.6
26

37
* Adds `usePhotoPickerAndroid` options.

0 commit comments

Comments
 (0)