На произвольной глубине в моем приложении Flutter пользователь может выйти из приложения, нажав кнопку. Как я могу заменить текущий стек экранов экраном авторизации/входа и получить «красивую» анимацию для перехода?
В настоящее время я делаю следующее, но анимация совсем не красивая. В iOS экраны в стеке выдвигаются вправо, а экран авторизации выдвигается справа. Слишком много скольжения.
NavigatorState navigatorState = Navigator.of(this.context);
while (navigatorState.canPop()) {
navigatorState.pop();
}
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (BuildContext context) {
return AuthScreen();
}),
);
Я бы предпочел, чтобы экран авторизации скользил снизу вверх на iOS, а экран аутентификации появлялся с обычной анимацией на Android. Затем удалите все экраны ниже в стеке. Я не могу найти способ манипулировать стеком таким образом во Flutter.
попробуйте это.
Navigator.pushAndRemoveUntil(
context,
PageRouteBuilder(pageBuilder: (BuildContext context, Animation animation,
Animation secondaryAnimation) {
return AuthScreen();
}, transitionsBuilder: (BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation, Widget child) {
return new SlideTransition(
position: new Tween<Offset>(
begin: const Offset(1.0, 0.0),
end: Offset.zero,
).animate(animation),
child: child,
);
}),
(Route route) => false);
Здесь pushAndRemoveUntil
очистит стек и нажмет новый экран.
PageRouteBuilder
позволяет анимировать переходы между экранами. Вы можете поиграть с ним, вернув FadeTransition
или любой другой, который вы предпочитаете. Таким образом, вы можете добиться анимированного перехода.
Если вы объявляете маршруты в своем MaterialApp, например.
MaterialApp(
home: new Screen1(),
routes: <String, WidgetBuilder> {
'/AuthScreen': (BuildContext context) => new AuthScreen()
},
)
Вы можете использовать
Navigator.of(context).pushNamedAndRemoveUntil('/AuthScreen', (Route<dynamic> route) => false);
хороший ответ! Можете ли вы также объяснить, для чего этот аргумент? (Маршрут <динамический> маршрут) => ложь