我需要在应用启动时自动推送新屏幕(如果用户登录或注销)。
我使用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;
}
AuthStatus
是Enum
。我更改了Model
中的值。
这是正确的推送路线,但存在问题:
同一条路线被多次推入。例如,同一“登录”页面被按下至少5次。
如何多次阻止同一屏幕上的Navigator?
谢谢!
答案 0 :(得分:0)
在Brian Egan的示例中,他在_navigationListener方法中进行了布尔测试。他的评论是:
//每当模型更改时,将运行此功能!我们将使用它来 //检查导航布尔值。如果设置为true,我们将推送一个新屏幕! // //如果没有,我们什么也不会做。
因此,在代码中需要使用一个类似的布尔值,即使该方法被调用了多少次,也只能浏览一次。