Он поддерживает deeplinks, с помощью которых можно открыть приложение на необходимой странице: например ссылка в письме, ведущая на сделанный пользователем заказ. А также Route Guard, который создатели библиотеки сравнивают с интерсептором для навигации, но о нем чуть позже.
Для создание конфигурации роутера необходимо создать класс роутера:
@AutoRouterConfig()
class AppRouter extends $AppRouter {
@override
List<AutoRoute> get routes => [
AutoRoute(page: HomeRoute.page),
];
}
Для получения HomeRoute, необходимо пометить аннотацией
RoutePage HomeScreen. Причем в стандартной настройке Screen и Page в названии страницы заменяются на Route.
@RoutePage()
class HomeScreen extends StatefulWidget {}
В роуты также можно передавать параметры, при этом сохраняются стандартные значения и учитывается наличие поля required.
context.router.push(BookRoute(bookId: id));
Для того, что бы им можно было пользоваться, необходимо добавить роутер в приложение:
final _appRouter = AppRouter();
@override
Widget build(BuildContext context){
return MaterialApp.router(
routerConfig: _appRouter.config(),
);
}
Далее с помощью extension над context можем получать router, имеющий такое же api как у navigator и так же использует навигацию через стек.
– maybePop — по возможности убирает последний роут из стека.
– push — добавляет в стек новый роут.
– replace — заменяет текущий роут на другой. При этом не меняет стек роутов.
– remove — убирает определенный роут из стека.
– navigate — если роут в стеке, убирает роуты до того, как попадется необходимый или добавляет роут в стек.
Большая часть остальных методов является просто комбинацией из этих 5-ти. Всем хорошего кода!
Делитесь в чате своим опытом работы с библиотекой.
