从Flutter应用程序注销不会返回登录页面

时间:2019-04-29 20:02:34

标签: firebase authentication flutter firebase-authentication

我正在使用Firebase对我的应用程序中的用户进行身份验证以及登录/注册,并且当我直接从登录页面后直接从主页注销时,注销可以正常工作,但是从设置页面注销时却无法正常工作从首页路由。

它已在Firebase上注销,但是除非按下应用程序栏上的“后退”按钮,否则该页面不会立即返回登录页面并立即调用注销。

这是我的退出功能:

abstract class BaseAuth {
  Future<void> signOut();
}

Future<void> signOut() async {
  return _firebaseAuth.signOut();
}

final BaseAuth auth;
final VoidCallback onSignedOut;

_signOut() async {
  try {
    await widget.auth.signOut();
    widget.onSignedOut();
  } catch (e) {
    print(e);
  }
}

在我的根页面中,我有:

@override
  Widget build(BuildContext context) {
    switch (authStatus) {
      case AuthStatus.NOT_DETERMINED:
        return _buildWaitingScreen();
        break;
      case AuthStatus.NOT_LOGGED_IN:
        return new LoginSignUpPage(
          auth: widget.auth,
          onSignedIn: _onLoggedIn,
        );
        break;
      case AuthStatus.LOGGED_IN:
        if (_userId.length > 0 && _userId != null) {
          return new HomePage(
            userId: _userId,
            auth: widget.auth,
            onSignedOut: _onSignedOut,
          );
        } else return _buildWaitingScreen();
        break;
      default:
        return _buildWaitingScreen();
    }
  }

因此,如果未登录身份验证状态,则应返回到LoginSignUpPage。

我不确定为什么会发生这种延迟。 任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

这对我有用

Navigator.of(上下文,rootNavigator:true).pop(上下文);

答案 1 :(得分:0)

因此,将# Calculate mean mean = sum(data)/len(data) # Calculate sum of square of difference # of data points from mean dev = 0 for rec in data: dev += pow((rec - mean),2) # Calculate variance var = dev/len(data) # Calculate standard deviation std_dev = math.sqrt(var) 添加为Navigator.popUntil(context, ModalRoute.withName("/"));的最后一行可以解决此问题。

它只是弹出堆叠在堆栈中第一个屏幕顶部的所有屏幕。

答案 2 :(得分:0)

尝试使用 PushReplacement,即使我在遇到问题时使用它而我没有时间修复它,它也可以用作问题的修复!

Navigator.of(context).pushReplacement or pushNamedReplacement(Screen to navigate);