Estou criando um aplicativo SwiftUI com autenticação do Firebase e estou enfrentando problemas de navegação quando os usuários efetuam logout. Meu aplicativo tem a seguinte estrutura:
Uma visualização raiz em App.swift que mostra condicionalmente: WelcomeView se não autenticado MainTabView se autenticado
No MainTabView, os usuários podem navegar por vários NavigationLinks aninhados:
MainTabView → Configurações (via NavigationLink) Configurações → Informações da conta (via NavigationLink ou planilha)
As informações da conta contêm um botão Sair. Quando o usuário efetua logout na tela Informações da conta profundamente aninhada, o estado da Autenticação do Firebase é atualizado corretamente (confirmado por instruções de impressão), mas a interface do usuário não retorna para o WelcomeView.
Detalhes de implementação usando Firebase Auth para autenticação
O que eu tentei explicitamente definindo isAuthenticated = false no método signOut
Usando @EnvironmentObject para FireAuthManager
Tentando fazer o pop-up manualmente para o root (o que não funciona bem no SwiftUI)
Pergunta: Qual é o padrão correto no SwiftUI para redefinir a navegação e retornar à tela de boas-vindas ao sair ao usar NavigationLinks profundamente aninhados? Como posso garantir que a IU responda corretamente às alterações no estado de autenticação, independentemente da profundidade do usuário na pilha de navegação?
func signOut(comp: (Error?) -> Void) {
do {
try Auth.auth().signOut()
isProfileCompleted = nil
self.isAuthenticated = false
PresenceManager.shared.setOfflineOnLogout()
comp(nil)
print("User signed out successfully")
} catch let signOutError as NSError {
print("Error signing out: \(signOutError.localizedDescription)")
comp(signOutError)
}
}
NavigationStack {
Group {
if authManager.isAuthenticated == false {
WelcomeView()
} else {
MainTabView()
}
}
}
}