Flutter: 重置路由

6 浏览
0 Comments

Flutter: 重置路由

每次调用Auth时,我应该做什么来重置路由?我找不到正确的解决方案。

例如,如果我登录然后退出登录,如果我返回Auth(),我希望用户被重定向到initialRoute。目前只显示CircularProgressIndicator。

我不知道如何从另一个小部件中使用pushNamedAndRemoveUntil来调用Auth()小部件。

const Auth({Key? key}) : super(key: key);

@override

State createState() => _AuthState();

}

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(),

},

),

);

}

}

谢谢。

0
0 Comments

问题的出现原因:

问题是由于在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中正确重置路由。希望这个解决方法可以帮助到您。

0
0 Comments

问题:Flutter中重置路由的原因是什么?有什么解决方法?

在Flutter中,如果我们想要重置所有的路由并跳转到登陆页面,可以使用以下代码:

Navigator.pushNamedAndRemoveUntil(

context, '/Login', (Route<dynamic> route) => false);

然而,有一个问题是,如果我们从另一个小部件调用Auth方法,那么应该怎么做呢?下面的代码示例中的方法无法实现重置路由:

onPressed: () {

Navigator.of(context).pushAndRemoveUntil(

MaterialPageRoute(builder: (context) => Auth()),

(Route<dynamic> route) => false);

}),

这段代码的功能是将新路由推送到导航器中,并将之前的所有路由删除。但是,这段代码似乎无法正常工作。新的路由是否被成功推送?之前的路由是否被删除?

0