2

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

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 多次推送同一屏幕?

谢谢!

4

1 回答 1

0

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

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

因此,需要在代码中使用类似的布尔值,以便仅导航一次,尽管该方法被调用了多少次。

于 2020-02-08T12:37:13.433 回答