Flutter: 重置路由
Flutter: 重置路由
每次调用Auth时,我应该做什么来重置路由?我找不到正确的解决方案。
例如,如果我登录然后退出登录,如果我返回Auth(),我希望用户被重定向到initialRoute。目前只显示CircularProgressIndicator。
我不知道如何从另一个小部件中使用pushNamedAndRemoveUntil来调用Auth()小部件。
const Auth({Key? key}) : super(key: key);
@override
State
}
class _AuthState extends State
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(child: CircularProgressIndicator()),
);
}
@override
void initState() {
super.initState();
userController();
}
@override
void dispose() {
super.dispose();
}
void userController() {
runApp(
MaterialApp(
initialRoute: '/Login',
routes: {
'/Login': (context) => Login(),
'/LoginPassword': (context) => LoginPassword(),
'/CodeVerification': (context) => CodeVerification(),
},
),
);
}
}
谢谢。
问题的出现原因:
问题是由于在Flutter中重置路由(Reset routes)时,使用了错误的代码或方法导致的。具体原因是在调用Navigator的pushNamedAndRemoveUntil方法时,传入的参数不正确,或者在调用Navigator的pushAndRemoveUntil方法时,传入的参数不正确。
解决方法:
要解决这个问题,需要根据具体情况对代码进行修改。首先,确保在调用Navigator的pushNamedAndRemoveUntil方法时,传入正确的参数。其次,如果在其他Widget中调用了Auth方法,需要确保在onPressed方法中正确调用pushAndRemoveUntil方法,并且传入正确的参数。
下面是示例代码:
// main.dart
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: '/',
routes: {
'/': (context) => Home(),
'/login': (context) => Login(),
},
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: RaisedButton(
child: Text('Go to Login'),
onPressed: () {
Navigator.of(context).pushNamedAndRemoveUntil(
'/login',
(route) => false,
);
},
),
),
);
}
}
class Login extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Login'),
),
body: Center(
child: RaisedButton(
child: Text('Reset routes'),
onPressed: () {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (context) => Auth()),
(route) => false,
);
},
),
),
);
}
}
class Auth extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Auth'),
),
body: Center(
child: Text('Reset routes'),
),
);
}
}
请注意,上述代码仅为示例代码,您可以根据自己的实际需求进行修改。在这个示例中,我们创建了一个简单的应用程序,其中包含三个页面:Home、Login和Auth。在Home页面中,点击按钮会跳转到Login页面,并重置路由。在Login页面中,点击按钮会跳转到Auth页面,并重置路由。
通过正确使用pushNamedAndRemoveUntil和pushAndRemoveUntil方法,您可以在Flutter中正确重置路由。希望这个解决方法可以帮助到您。
问题:Flutter中重置路由的原因是什么?有什么解决方法?
在Flutter中,如果我们想要重置所有的路由并跳转到登陆页面,可以使用以下代码:
Navigator.pushNamedAndRemoveUntil(
context, '/Login', (Route<dynamic> route) => false);
然而,有一个问题是,如果我们从另一个小部件调用Auth方法,那么应该怎么做呢?下面的代码示例中的方法无法实现重置路由:
onPressed: () {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (context) => Auth()),
(Route<dynamic> route) => false);
}),
这段代码的功能是将新路由推送到导航器中,并将之前的所有路由删除。但是,这段代码似乎无法正常工作。新的路由是否被成功推送?之前的路由是否被删除?