我在flutter中使用MaterialRoute
和Navigator
,因为go_router
不支持许多必须具有的组件,如
PopUntil()
pushReplacementAndPopUntil()
这里我有每个屏幕的基本路线和描述性路线。我的要求是我可以在任何屏幕,如果屏幕是导航堆栈中的唯一路线,我希望它重定向到基地路线退出应用程序之前.
示例:
我在个人资料屏幕,它是在导航堆栈中的唯一页面,当点击后退按钮,而不是通常的行为关闭的应用程序,我希望应用程序重定向到基地路线,然后退出应用程序.route
class MyRoutes {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case Routes.profileMain:
return MaterialPageRoute(builder: (context) => const ProfileScreen());
case Routes.categoryAll:
return MaterialPageRoute(builder: (context) => const CategoriesAll());
case Routes.filter:
return MaterialPageRoute(builder: (context) => const FilterScreen());
default:
return MaterialPageRoute(builder: (context) {
return BlocBuilder<AuthCubit, AuthState>(
buildWhen: (oldState, newState) {
return oldState is AuthInitialState;
},
builder: (context, state) {
if (state is AuthLoggedInState) {
return const MainHomeScreen();
} else {
return SignIn();
}
},
);
}
);
}
}
}
base route
是由default
返回的。如果这是不可行的,我也很好地重定向到MainHomeScreen()
。我的preferred将是先验的,这样它就可以是动态的。
1条答案
按热度按时间cgh8pdjw1#
您可以覆盖后退按钮。你可以考虑WillPopScope
https://api.flutter.dev/flutter/widgets/WillPopScope-class.html