История маршрутизации Flutter GetX
Можно ли увидеть стек навигатора с помощью GetX? Я просмотрел документацию, но ничего не нашел по этому поводу. Я обычно закрываю, например, такие диалоги
Get.until((route) => !Get.isDialogOpen);
Но мне было интересно, могу ли я закрыть маршруты, если экземпляр определенной страницы находится в истории маршрутизации, которая будет примерно такой
Get.until((route) => !Get.routingHistory.contains('/someRoute'));
Обратите внимание, что это недопустимый синтаксис.
7 ответов
Get.until Удалять экраны до выполнения условия. То же самое и с Navigation.popUntil(). Вы можете использовать его как Get.until((route) => Get.currentRoute == '/home').
Get.offNamed По маршруту Named удалить текущий экран и добавить новый экран. То же самое с Navigation.pushReplacementNamed(). Вы можете использовать его как Get.offNamed('/second').
Get.offAndToNamed По названному маршруту добавьте новый экран, а затем удалите предыдущий экран. То же самое и с Navigation.popAndPushNamed(). Вы можете использовать его как Get.offAndToNamed('/second').
Get.offUntil Удаляйте экраны до тех пор, пока не будет выполнено условие, а затем добавьте новый экран. То же самое и с Navigation.pushAndRemoveUntil(). Вы можете использовать его как Get.offUntil(page, (route) => (route as GetPageRoute).routeName == '/home').
Get.offNamedUntil По именованному маршруту удаляйте экраны до тех пор, пока не будет выполнено условие, а затем добавьте новый экран. То же самое и с Navigation.pushNamedAndRemoveUntil(). Вы можете использовать его как Get.offNamedUntil(page, ModalRoute.withName('/home')).
Пожалуйста, используйте в соответствии с вашим вариантом использования
Вам нужно использовать:
Get.offUntil(page, (route) => false)
page означает новую страницу для навигации.
(route) => false
Состояние.
У GetX есть еще одна полезная функция:
int times = 2;
Get.close(times);
Закройте столько маршрутов, сколько определено в [раз]
Если вы хотите продолжать закрывать маршруты, пока не достигнете маршрута страницы...
Navigator.of(context).popUntil(ModalRoute.withName('/route-name'));
Get.until((route) {
if (route.settings.name == Routes.TEST1) {
//Return to the specified page
return true;
} else {
return false;
}
});
It is possible. Navigator.popUntil pops pages until a passed predicate returns true. We can query the following route in the navigator stack and decide what decision to make.
The GetX method for doing the same is
`
Get.offUntil( MaterialPageRoute(builder: (context) => const NewPage()), (route) {
var currentRoute = route.settings.name;
debugPrint("Get.currentRoute --- $currentRoute");
if(currentRoute == "/Home") {
return true;
} else {
return false;
}
}
`
The code above pops until home. Also, we can add custom logic in the if-else block above.
Get.offAll(Home()); // remove all previous routes and redirect to home
из с namedRoutes:
Get.offAllNamed('/home');