【发布时间】:2022-01-07 20:03:09
【问题描述】:
我在我的应用程序中苦苦挣扎:
用户登录后,我使用pushReplaceNamed 导航到我的HomeView,因此用户应该无法弹出(通过拖动)HomeView,因为在我看来是根视图。然而事实并非如此。即使在调用pushReplaceNamed 之后,用户仍然可以拖动弹出:
我只是调用:
Navigator.pushReplacementNamed(
context,
Views.home,
);
在应用程序第一次启动时显示StartView,从那里我导航到EmailView,然后从那里导航到LoginView。上面的代码在我的LoginView 里面。在所有其他视图中,我只需调用pushNamed。
我在这里缺少什么?为什么用户可以在HomeView上拖动弹窗?
(我知道我可以用WillPopScope 禁用它,但感觉不对……)
这是我在MaterialApp 中的设置:
Widget build(BuildContext context) {
return MaterialApp(
title: 'AppFlug',
navigatorKey: Get.key,
theme: ThemeData(
fontFamily: AppTextStyles.montserrat,
primarySwatch: ColorService.createMaterialColor(
AppColors.blue,
),
backgroundColor: AppColors.white,
scaffoldBackgroundColor: AppColors.white,
),
initialRoute:
AuthenticationService.isLoggedIn() ? Views.home : Views.start,
onGenerateRoute: AppRouter.generateRoute,
);
}
这是我的AppRouter:
class AppRouter {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case Views.start:
return MaterialPageRoute(
builder: (context) => const StartView(),
);
case Views.email:
return MaterialPageRoute(
builder: (context) => EmailView(),
);
case Views.signUp:
String email = settings.arguments as String;
return MaterialPageRoute(
builder: (context) => SignUpView(
email: email,
),
);
case Views.login:
String email = settings.arguments as String;
return MaterialPageRoute(
builder: (context) => LoginView(
email: email,
),
);
case Views.home:
return MaterialPageRoute(
builder: (context) => HomeView(),
);
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(
child: Text(
'No route defined for ${settings.name}',
),
),
),
);
}
}
}
【问题讨论】:
标签: flutter dart navigation flutter-routes