in nav2-usability/scenario_code/lib/skipping-stacks/router.dart [228:291]
Widget build(BuildContext context) {
final selectedBook = _appState.selectedBook;
final selectedAuthor = _appState.selectedAuthor;
return Navigator(
key: navigatorKey,
pages: [
if (selectedAuthor != null) ...[
MaterialPage(
key: ValueKey('AuthorsListPage'),
child: AuthorsListScreen(
authors: _appState.authors,
onTapped: _handleAuthorTapped,
onGoToBooksTapped: _handleGoToBooksTapped,
),
),
AuthorDetailPage(
author: selectedAuthor,
),
] else if (selectedBook != null) ...[
MaterialPage(
key: ValueKey('BooksListPage'),
child: BooksListScreen(
books: _appState.books,
onTapped: _handleBookTapped,
),
),
BookDetailsPage(
book: selectedBook,
onAuthorTapped: _handleAuthorTapped,
)
] else if (_appState.isViewingAuthorsPage)
MaterialPage(
key: ValueKey('AuthorsListPage'),
child: AuthorsListScreen(
authors: _appState.authors,
onTapped: _handleAuthorTapped,
onGoToBooksTapped: _handleGoToBooksTapped,
),
)
else
MaterialPage(
key: ValueKey('BooksListPage'),
child: BooksListScreen(
books: _appState.books,
onTapped: _handleBookTapped,
),
),
],
onPopPage: (route, result) {
if (!route.didPop(result)) {
return false;
}
if (_appState.selectedAuthor != null) {
_appState.isViewingAuthorsPage = true;
}
_appState.clearSelectedBook();
_appState.clearSelectedAuthor();
return true;
},
);
}