In the last page, we created a BooksRouter
and AccountRouter
to handle their respective routes via nested routes. We can take this example one step further by wrapping our nested routes with other widgets.
BooksRouter
with a state management solution. By doing so, we can scope our state to only books routes instead of lifting state up above our main AppRouter
. In this example, we'll wrap our BooksRouter
with a cubit, scaffold and app bar , and scope it to just books routes. Let's start by creating the BooksWrapperPage
class.class BookWrapperPage extends StatelessWidget {
const BookWrapperPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: BooksAppBar(),
body: BlocProvider(
create: (context) => BooksCubit(),
child: AutoRouter(), // The AutoRouter() widget used here
// is required to render sub-routes
),
);
}
}
BooksWrapperPage
into the BooksRouter
...
AutoRoute(
path: "/books",
name: "BooksRouter",
page: BooksWrapperPage, // We replace EmptyRouterPage with our
// BooksWrapperPage now!
children: [
AutoRoute(path: '', page: BooksPage),
AutoRoute(path: 'details', page: BookDetailsPage),
RedirectRoute(path: '*', redirectTo: ''),
],
),
...
BooksCubit
, Scaffold
, and BooksAppBar
. To see a visual representation of what is happening, check out the image below: