簡體   English   中英

注銷 Flutter 應用程序不會返回登錄頁面

[英]Logging out of Flutter app doesn't go back to login page

我正在使用 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。

我不確定為什么會發生這種延遲。 任何幫助,將不勝感激!

所以添加Navigator.popUntil(context, ModalRoute.withName("/")); 因為_signOut()中的最后一行解決了這個問題。

它只是彈出堆棧中第一個屏幕頂部堆疊的所有屏幕。

這對我有用

Navigator.of(context, rootNavigator: true).pop(context);

嘗試使用 PushReplacement,即使我在遇到問題時使用它,但我沒有時間修復它,是的,它也可以用作問題的修復!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM