导航器多次按下同一屏幕

时间:2019-04-29 20:11:08

标签: dart flutter navigation flutter-navigation scoped-model

我需要在应用启动时自动推送新屏幕(如果用户登录或注销)。

我使用scoped_model进行身份验证,因此当用户值在模型中更改时需要导航。

我在这里遵循Brian Egan的建议:https://github.com/brianegan/scoped_model/issues/43#issuecomment-442444143

class LoginScreenState extends State<LoginScreen> {

  @override
  void didChangeDependencies() {
    ScopedModel.of<AuthModel>(context).addListener(_navigationListener);
    super.didChangeDependencies();
  }

  @override
  void dispose() {
    ScopedModel.of<AuthModel>(context)
        .removeListener(_navigationListener);
    super.dispose();
  }


  void _navigationListener() {

switch (ScopedModel.of<AuthModel>(context).AuthStatus) {
  case AuthStatus.NotAuth:
    Navigator.of(context).pushNamed(‘/Login’);
    break;
  case AuthStatus.Auth:
    Navigator.of(context).pushNamed(‘/Main’);
    break;
  case AuthStatus.Register:
    Navigator.of(context).pushNamed(‘/Register’);
    break;

  }

AuthStatusEnum。我更改了Model中的值。

这是正确的推送路线,但存在问题:

同一条路线被多次推入。例如,同一“登录”页面被按下至少5次。

如何多次阻止同一屏幕上的Navigator?

谢谢!

1 个答案:

答案 0 :(得分:0)

在Brian Egan的示例中,他在_navigationListener方法中进行了布尔测试。他的评论是:

//每当模型更改时,将运行此功能!我们将使用它来 //检查导航布尔值。如果设置为true,我们将推送一个新屏幕! // //如果没有,我们什么也不会做。

因此,在代码中需要使用一个类似的布尔值,即使该方法被调用了多少次,也只能浏览一次。