mirror of
https://github.com/flutter/packages.git
synced 2025-06-29 14:18:54 +08:00
[go_router] Use leak_tracker_flutter_testing
(#6210)
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
## NEXT
|
||||
## 13.2.1
|
||||
|
||||
* Updates minimum supported SDK version to Flutter 3.13/Dart 3.1.
|
||||
- Updates minimum supported SDK version to Flutter 3.16/Dart 3.2.
|
||||
- Fixes memory leaks.
|
||||
|
||||
## 13.2.0
|
||||
|
||||
|
@ -4,8 +4,8 @@ version: 3.0.1
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ^3.1.0
|
||||
flutter: ">=3.13.0"
|
||||
sdk: ^3.2.0
|
||||
flutter: ">=3.16.0"
|
||||
|
||||
dependencies:
|
||||
adaptive_navigation: ^0.0.4
|
||||
|
@ -189,6 +189,13 @@ class _CustomNavigatorState extends State<_CustomNavigator> {
|
||||
_pages = null;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_controller?.dispose();
|
||||
_registry.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _updatePages(BuildContext context) {
|
||||
assert(_pages == null);
|
||||
final List<Page<Object?>> pages = <Page<Object?>>[];
|
||||
|
@ -1,13 +1,13 @@
|
||||
name: go_router
|
||||
description: A declarative router for Flutter based on Navigation 2 supporting
|
||||
deep linking, data-driven routes and more
|
||||
version: 13.2.0
|
||||
version: 13.2.1
|
||||
repository: https://github.com/flutter/packages/tree/main/packages/go_router
|
||||
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router%22
|
||||
|
||||
environment:
|
||||
sdk: ">=3.1.0 <4.0.0"
|
||||
flutter: ">=3.13.0"
|
||||
sdk: ">=3.2.0 <4.0.0"
|
||||
flutter: ">=3.16.0"
|
||||
|
||||
dependencies:
|
||||
collection: ^1.15.0
|
||||
|
@ -371,6 +371,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
|
||||
await tester.pumpWidget(MaterialApp.router(
|
||||
routerConfig: goRouter,
|
||||
|
@ -22,6 +22,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -35,6 +36,7 @@ void main() {
|
||||
(WidgetTester tester) async {
|
||||
final ValueNotifier<bool> showHomeValueNotifier =
|
||||
ValueNotifier<bool>(false);
|
||||
addTearDown(showHomeValueNotifier.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: ValueListenableBuilder<bool>(
|
||||
@ -83,6 +85,7 @@ void main() {
|
||||
testWidgets('NoTransitionPage does not apply any reverse transition',
|
||||
(WidgetTester tester) async {
|
||||
final ValueNotifier<bool> showHomeValueNotifier = ValueNotifier<bool>(true);
|
||||
addTearDown(showHomeValueNotifier.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: ValueListenableBuilder<bool>(
|
||||
@ -139,6 +142,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: router));
|
||||
expect(find.byKey(homeKey), findsOneWidget);
|
||||
router.push('/dismissible-modal');
|
||||
@ -176,6 +180,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: router));
|
||||
expect(find.byKey(homeKey), findsOneWidget);
|
||||
|
||||
|
@ -12,6 +12,7 @@ import 'test_helpers.dart';
|
||||
Future<GoRouter> createGoRouter(
|
||||
WidgetTester tester, {
|
||||
Listenable? refreshListenable,
|
||||
bool dispose = true,
|
||||
}) async {
|
||||
final GoRouter router = GoRouter(
|
||||
initialLocation: '/',
|
||||
@ -25,6 +26,9 @@ Future<GoRouter> createGoRouter(
|
||||
],
|
||||
refreshListenable: refreshListenable,
|
||||
);
|
||||
if (dispose) {
|
||||
addTearDown(router.dispose);
|
||||
}
|
||||
await tester.pumpWidget(MaterialApp.router(
|
||||
routerConfig: router,
|
||||
));
|
||||
@ -65,6 +69,7 @@ Future<GoRouter> createGoRouterWithStatefulShellRoute(
|
||||
], builder: mockStackedShellBuilder),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(
|
||||
routerConfig: router,
|
||||
));
|
||||
@ -287,6 +292,7 @@ void main() {
|
||||
GoRoute(path: '/page-1', builder: (_, __) => const SizedBox()),
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: goRouter,
|
||||
@ -369,6 +375,7 @@ void main() {
|
||||
builder: (_, __) => const SizedBox()),
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: goRouter,
|
||||
@ -418,6 +425,7 @@ void main() {
|
||||
GoRoute(path: '/page-1', builder: (_, __) => const SizedBox()),
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: goRouter,
|
||||
@ -535,6 +543,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(
|
||||
routerConfig: router,
|
||||
));
|
||||
@ -634,8 +643,13 @@ void main() {
|
||||
testWidgets('dispose unsubscribes from refreshListenable',
|
||||
(WidgetTester tester) async {
|
||||
final FakeRefreshListenable refreshListenable = FakeRefreshListenable();
|
||||
final GoRouter goRouter =
|
||||
await createGoRouter(tester, refreshListenable: refreshListenable);
|
||||
addTearDown(refreshListenable.dispose);
|
||||
|
||||
final GoRouter goRouter = await createGoRouter(
|
||||
tester,
|
||||
refreshListenable: refreshListenable,
|
||||
dispose: false,
|
||||
);
|
||||
await tester.pumpWidget(Container());
|
||||
goRouter.dispose();
|
||||
expect(refreshListenable.unsubscribed, true);
|
||||
|
@ -26,6 +26,7 @@ void main() {
|
||||
builder: (_, __) => const SizedBox())
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(
|
||||
routerConfig: router,
|
||||
));
|
||||
|
@ -32,6 +32,8 @@ void main() {
|
||||
return null;
|
||||
},
|
||||
);
|
||||
|
||||
addTearDown(router.dispose);
|
||||
final SimpleDependency dependency = SimpleDependency();
|
||||
addTearDown(() => dependency.dispose());
|
||||
|
||||
|
@ -968,6 +968,8 @@ void main() {
|
||||
testWidgets('does not crash when inherited widget changes',
|
||||
(WidgetTester tester) async {
|
||||
final ValueNotifier<String> notifier = ValueNotifier<String>('initial');
|
||||
|
||||
addTearDown(notifier.dispose);
|
||||
final List<GoRoute> routes = <GoRoute>[
|
||||
GoRoute(
|
||||
path: '/',
|
||||
@ -985,6 +987,7 @@ void main() {
|
||||
final GoRouter router = GoRouter(
|
||||
routes: routes,
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -3212,6 +3215,7 @@ void main() {
|
||||
(WidgetTester tester) async {
|
||||
final GoRouterNamedLocationSpy router =
|
||||
GoRouterNamedLocationSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -3230,6 +3234,7 @@ void main() {
|
||||
|
||||
testWidgets('calls [go] on closest GoRouter', (WidgetTester tester) async {
|
||||
final GoRouterGoSpy router = GoRouterGoSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -3247,6 +3252,7 @@ void main() {
|
||||
testWidgets('calls [goNamed] on closest GoRouter',
|
||||
(WidgetTester tester) async {
|
||||
final GoRouterGoNamedSpy router = GoRouterGoNamedSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -3268,6 +3274,7 @@ void main() {
|
||||
testWidgets('calls [push] on closest GoRouter',
|
||||
(WidgetTester tester) async {
|
||||
final GoRouterPushSpy router = GoRouterPushSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -3285,6 +3292,7 @@ void main() {
|
||||
testWidgets('calls [push] on closest GoRouter and waits for result',
|
||||
(WidgetTester tester) async {
|
||||
final GoRouterPushSpy router = GoRouterPushSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routeInformationProvider: router.routeInformationProvider,
|
||||
@ -3305,6 +3313,7 @@ void main() {
|
||||
testWidgets('calls [pushNamed] on closest GoRouter',
|
||||
(WidgetTester tester) async {
|
||||
final GoRouterPushNamedSpy router = GoRouterPushNamedSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -3326,6 +3335,7 @@ void main() {
|
||||
testWidgets('calls [pushNamed] on closest GoRouter and waits for result',
|
||||
(WidgetTester tester) async {
|
||||
final GoRouterPushNamedSpy router = GoRouterPushNamedSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routeInformationProvider: router.routeInformationProvider,
|
||||
@ -3349,6 +3359,7 @@ void main() {
|
||||
|
||||
testWidgets('calls [pop] on closest GoRouter', (WidgetTester tester) async {
|
||||
final GoRouterPopSpy router = GoRouterPopSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -3363,6 +3374,7 @@ void main() {
|
||||
testWidgets('calls [pop] on closest GoRouter with result',
|
||||
(WidgetTester tester) async {
|
||||
final GoRouterPopSpy router = GoRouterPopSpy(routes: routes);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
routerConfig: router,
|
||||
@ -4315,6 +4327,7 @@ void main() {
|
||||
GoRoute(path: '/a', builder: (_, __) => const DummyScreen()),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
@ -4377,6 +4390,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
@ -4443,6 +4457,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
@ -4499,6 +4514,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: router));
|
||||
|
||||
@ -4568,6 +4584,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
@ -4638,6 +4655,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: router));
|
||||
|
||||
|
@ -42,6 +42,7 @@ WidgetTesterCallback testClickingTheButtonRedirectsToRoot({
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(appRouterBuilder(router));
|
||||
await tester.tap(buttonFinder);
|
||||
await tester.pumpAndSettle();
|
||||
|
@ -97,6 +97,7 @@ void main() {
|
||||
)
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
|
@ -25,6 +25,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
|
||||
// run MaterialApp, initial screen path is '/' -> ScreenA
|
||||
await tester.pumpWidget(
|
||||
|
@ -27,6 +27,7 @@ void main() {
|
||||
redirectLimit: redirectLimit,
|
||||
redirect: redirect,
|
||||
);
|
||||
addTearDown(router.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(
|
||||
routerConfig: router,
|
||||
));
|
||||
|
@ -199,6 +199,7 @@ void main() {
|
||||
initialLocation: '/build',
|
||||
routes: _routes,
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('build')), findsOneWidget);
|
||||
expect(find.byKey(const Key('buildPage')), findsNothing);
|
||||
@ -212,6 +213,7 @@ void main() {
|
||||
initialLocation: '/build-page',
|
||||
routes: _routes,
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('build')), findsNothing);
|
||||
expect(find.byKey(const Key('buildPage')), findsOneWidget);
|
||||
@ -229,6 +231,7 @@ void main() {
|
||||
_shellRouteDataBuilder,
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('builder')), findsOneWidget);
|
||||
expect(find.byKey(const Key('page-builder')), findsNothing);
|
||||
@ -272,6 +275,7 @@ void main() {
|
||||
),
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(
|
||||
routerConfig: goRouter,
|
||||
));
|
||||
@ -301,6 +305,7 @@ void main() {
|
||||
_shellRouteDataPageBuilder,
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('builder')), findsNothing);
|
||||
expect(find.byKey(const Key('page-builder')), findsOneWidget);
|
||||
@ -318,6 +323,7 @@ void main() {
|
||||
_statefulShellRouteDataBuilder,
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('builder')), findsOneWidget);
|
||||
expect(find.byKey(const Key('page-builder')), findsNothing);
|
||||
@ -333,6 +339,7 @@ void main() {
|
||||
_statefulShellRouteDataPageBuilder,
|
||||
],
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('builder')), findsNothing);
|
||||
expect(find.byKey(const Key('page-builder')), findsOneWidget);
|
||||
@ -367,6 +374,7 @@ void main() {
|
||||
initialLocation: '/redirect',
|
||||
routes: _routes,
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('build')), findsNothing);
|
||||
expect(find.byKey(const Key('buildPage')), findsOneWidget);
|
||||
@ -380,6 +388,7 @@ void main() {
|
||||
initialLocation: '/redirect-with-state',
|
||||
routes: _routes,
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(MaterialApp.router(routerConfig: goRouter));
|
||||
expect(find.byKey(const Key('build')), findsNothing);
|
||||
expect(find.byKey(const Key('buildPage')), findsNothing);
|
||||
|
@ -18,6 +18,7 @@ void main() {
|
||||
redirect: (_, __) => '/',
|
||||
),
|
||||
);
|
||||
addTearDown(config.dispose);
|
||||
final GoRouter router = await createRouterWithRoutingConfig(config, tester);
|
||||
expect(find.text('home'), findsOneWidget);
|
||||
|
||||
@ -35,6 +36,7 @@ void main() {
|
||||
],
|
||||
),
|
||||
);
|
||||
addTearDown(config.dispose);
|
||||
await createRouterWithRoutingConfig(config, tester);
|
||||
expect(find.text('home'), findsOneWidget);
|
||||
|
||||
@ -56,6 +58,7 @@ void main() {
|
||||
],
|
||||
),
|
||||
);
|
||||
addTearDown(config.dispose);
|
||||
final GoRouter router = await createRouterWithRoutingConfig(
|
||||
config,
|
||||
tester,
|
||||
@ -87,6 +90,7 @@ void main() {
|
||||
],
|
||||
),
|
||||
);
|
||||
addTearDown(config.dispose);
|
||||
final GoRouter router = await createRouterWithRoutingConfig(
|
||||
config,
|
||||
tester,
|
||||
@ -120,11 +124,13 @@ void main() {
|
||||
],
|
||||
),
|
||||
);
|
||||
addTearDown(config.dispose);
|
||||
final GoRouter router = await createRouterWithRoutingConfig(
|
||||
config,
|
||||
tester,
|
||||
errorBuilder: (_, __) => const Text('error'),
|
||||
);
|
||||
|
||||
expect(find.text('home'), findsOneWidget);
|
||||
// Sanity check.
|
||||
router.goNamed('abc');
|
||||
|
@ -188,6 +188,7 @@ Future<GoRouter> createRouter(
|
||||
requestFocus: requestFocus,
|
||||
overridePlatformDefaultLocation: overridePlatformDefaultLocation,
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
restorationScopeId:
|
||||
@ -221,6 +222,7 @@ Future<GoRouter> createRouterWithRoutingConfig(
|
||||
requestFocus: requestFocus,
|
||||
overridePlatformDefaultLocation: overridePlatformDefaultLocation,
|
||||
);
|
||||
addTearDown(goRouter.dispose);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp.router(
|
||||
restorationScopeId:
|
||||
@ -335,6 +337,12 @@ class DummyRestorableStatefulWidgetState
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_counter.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Container();
|
||||
}
|
||||
|
Reference in New Issue
Block a user