Навигация не активируется при успешном входе в систему - PullRequest
1 голос
/ 25 мая 2020

Я использую Firebase для аутентификации пользователей и хочу отображать домашний экран при успешном входе в систему. Однако моя навигационная ссылка на go в LandingPageView не срабатывает при нажатии кнопки «Войти». Я хочу, чтобы новое представление отображалось модально, а не в стеке навигации, чтобы вы не могли вернуться к главному экрану при входе в систему с помощью кнопок навигации, вместо этого вам нужно активно выходить из системы. Вот мой код

import SwiftUI
import FirebaseAuth

struct ContentView: View {

    @State var email: String = ""
    @State var passsword: String = ""
    @State var goToHome: Bool = false

    var body: some View {
        NavigationView {
        ZStack{
            Color(.systemGreen).edgesIgnoringSafeArea(.all)
            VStack {
                Text("Chat App").font(Font.custom("Pacifico-regular", size: 40))
                Spacer()
                VStack {
                    Text("Email: ").font(.body)
                    TextField("Enter your email", text: $email).textFieldStyle(RoundedBorderTextFieldStyle())
                        .padding(.horizontal)
                }
                VStack {
                    Text("Password: ")
                    TextField("Enter your password", text: $passsword)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .padding(.horizontal)
                }
                Button(action: {
                    Auth.auth().signIn(withEmail: self.email, password: self.passsword) { (result, error) in
                            if error != nil {
                                print("ERROR \(error!)")
                            } else {
                                print("SIGNED IN USER")
                                self.goToHome = true
                                NavigationLink(destination:
                                LandingPageView(), isActive: self.$goToHome) {
                                    Text("")
                                }.hidden()
                            }
                        }
                }) {
                    Text("Login")
                }
                NavigationLink(destination: SignUpView()) {
                    Text("Sign Up")
                }


            }
        }
    }
    }
    }

    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
        ContentView()
    }
}

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вот возможное решение

Button(action: {
    Auth.auth().signIn(withEmail: self.email, password: self.passsword) { (result, error) in
            if error != nil {
                print("ERROR \(error!)")
            } else {
                print("SIGNED IN USER")
                DispatchQueue.main.async {  // << activate on UI queue !!
                   self.goToHome = true
                }
            }
        }
}) {
    Text("Login")
}
.background( // << hide link in background
    NavigationLink(destination: LandingPageView(), 
        isActive: self.$goToHome) { EmptyView() }
)
0 голосов
/ 26 мая 2020

Сделайте это примерно так:

var body: some View {
ZStack {
    if Auth.auth().currentUser = nil
       // Your LogIn-View
       } else {
       LandingPageView()
   }
}
...