【发布时间】:2019-09-18 11:31:35
【问题描述】:
我需要在应用启动时自动推送新屏幕(如果用户登录或退出)。
我使用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 多次推送同一屏幕?
谢谢!
【问题讨论】:
-
我也有同样的问题,请问您解决了吗?
标签: dart flutter navigation flutter-navigation scoped-model