forked from flutter/packages
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update
RouteObserver
example and fix an error thrown (#141166)
fixes [`RouteObserver` example throws an error](flutter/flutter#141078) ### Description This updates the `RouteObserver` example from snippet to Dartpad example and fixes the error when running the code snippet
- Loading branch information
1 parent
1f3103e
commit 536de5e
Showing
3 changed files
with
169 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
// Copyright 2014 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:flutter/material.dart'; | ||
|
||
/// Flutter code sample for [RouteObserver]. | ||
final RouteObserver<ModalRoute<void>> routeObserver = RouteObserver<ModalRoute<void>>(); | ||
|
||
void main() { | ||
runApp(const RouteObserverApp()); | ||
} | ||
|
||
class RouteObserverApp extends StatelessWidget { | ||
const RouteObserverApp({super.key}); | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return MaterialApp( | ||
navigatorObservers: <NavigatorObserver>[ routeObserver ], | ||
home: const RouteObserverExample(), | ||
); | ||
} | ||
} | ||
|
||
class RouteObserverExample extends StatefulWidget { | ||
const RouteObserverExample({super.key}); | ||
|
||
@override | ||
State<RouteObserverExample> createState() => _RouteObserverExampleState(); | ||
} | ||
|
||
class _RouteObserverExampleState extends State<RouteObserverExample> with RouteAware { | ||
List<String> log = <String>[]; | ||
|
||
@override | ||
void didChangeDependencies() { | ||
super.didChangeDependencies(); | ||
routeObserver.subscribe(this, ModalRoute.of(context)!); | ||
} | ||
|
||
@override | ||
void dispose() { | ||
routeObserver.unsubscribe(this); | ||
super.dispose(); | ||
} | ||
|
||
@override | ||
void didPush() { | ||
// Route was pushed onto navigator and is now the topmost route. | ||
log.add('didPush'); | ||
} | ||
|
||
@override | ||
void didPopNext() { | ||
// Covering route was popped off the navigator. | ||
log.add('didPopNext'); | ||
} | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return Scaffold( | ||
body: Center( | ||
child: Column( | ||
mainAxisSize: MainAxisSize.min, | ||
children: <Widget>[ | ||
Text( | ||
'RouteObserver log:', | ||
style: Theme.of(context).textTheme.headlineSmall, | ||
), | ||
ConstrainedBox( | ||
constraints: const BoxConstraints(maxHeight: 300.0), | ||
child: ListView.builder( | ||
itemCount: log.length, | ||
itemBuilder: (BuildContext context, int index) { | ||
if (log.isEmpty) { | ||
return const SizedBox.shrink(); | ||
} | ||
return Text( | ||
log[index], | ||
textAlign: TextAlign.center, | ||
); | ||
}, | ||
), | ||
), | ||
OutlinedButton( | ||
onPressed: () { | ||
Navigator.of(context).push<void>( | ||
MaterialPageRoute<void>( | ||
builder: (BuildContext context) => const NextPage(), | ||
), | ||
); | ||
}, | ||
child: const Text('Go to next page'), | ||
), | ||
], | ||
), | ||
), | ||
); | ||
} | ||
} | ||
|
||
class NextPage extends StatelessWidget { | ||
const NextPage({super.key}); | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return Scaffold( | ||
body: Center( | ||
child: FilledButton( | ||
onPressed: () { | ||
Navigator.of(context).pop(); | ||
}, | ||
child: const Text('Go back to RouteAware page'), | ||
) | ||
), | ||
); | ||
} | ||
} |
41 changes: 41 additions & 0 deletions
41
examples/api/test/widgets/routes/route_observer.0_test.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// Copyright 2014 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:flutter_api_samples/widgets/routes/route_observer.0.dart' as example; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
|
||
void main() { | ||
testWidgets('RouteObserver notifies RouteAware widget', (WidgetTester tester) async { | ||
await tester.pumpWidget( | ||
const example.RouteObserverApp(), | ||
); | ||
|
||
// Check the initial RouteObserver logs. | ||
expect(find.text('didPush'), findsOneWidget); | ||
|
||
// Tap on the button to push a new route. | ||
await tester.tap(find.text('Go to next page')); | ||
await tester.pumpAndSettle(); | ||
|
||
// Tap on the button to go back to the previous route. | ||
await tester.tap(find.text('Go back to RouteAware page')); | ||
await tester.pumpAndSettle(); | ||
|
||
// Check the RouteObserver logs after the route is popped. | ||
expect(find.text('didPush'), findsOneWidget); | ||
expect(find.text('didPopNext'), findsOneWidget); | ||
|
||
// Tap on the button to push a new route again. | ||
await tester.tap(find.text('Go to next page')); | ||
await tester.pumpAndSettle(); | ||
|
||
// Tap on the button to go back to the previous route again. | ||
await tester.tap(find.text('Go back to RouteAware page')); | ||
await tester.pumpAndSettle(); | ||
|
||
// Check the RouteObserver logs after the route is popped again. | ||
expect(find.text('didPush'), findsOneWidget); | ||
expect(find.text('didPopNext'), findsNWidgets(2)); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters