Login View for SwiftUI
Sun Aug 22 2021 23:11:07 GMT+0000 (Coordinated Universal Time)
Saved by @zwadzinski616 #swift
// // ContentView.swift // Dyana // // Created by Zach Wadzinski on 3/29/21. // // Copyright Dyana Inc. import SwiftUI import Firebase struct LoginView: View { @State var email = "" @State var password = "" @State var isFocused = false @State var showAlert = false @State var alertMessage = "Something went wrong." @State var isLoading = false @State var isSuccessful = false @EnvironmentObject var user: UserStore @State var signupToggle = false func hideKeyboard() { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) } func login() { self.hideKeyboard() self.isFocused = false self.isLoading = true Auth.auth().signIn(withEmail: email, password: password) { (result, error) in self.isLoading = false if error != nil { self.alertMessage = error?.localizedDescription ?? "" self.showAlert = true } else { self.isSuccessful = true self.user.isLogged = true UserDefaults.standard.set(true, forKey: "isLogged") DispatchQueue.main.asyncAfter(deadline: .now() + 2) { self.isSuccessful = false self.email = "" self.password = "" self.user.showLogin = false } } } } var body: some View { ZStack { MainPageView() Color(#colorLiteral(red: 0.9787462354, green: 0.9567045569, blue: 0.9562209249, alpha: 1)).edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/) LoginLogo() .padding(.top) VStack { VinesView() .padding(.vertical, 30) LoginTextView() .padding(.vertical, 40) GoogleSignInView() //EmailLoginView(email: $email, password: $password, isFocused: $isFocused) VStack { ZStack { RoundedRectangle(cornerRadius: 8) .fill(Color(#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1))) .frame(width: .infinity, height: 46) HStack { VStack(alignment: .leading) { TextField("User Email", text: $email, onEditingChanged: { (changed) in print("Suggestion onEditingChanged - \(changed)") }) { print("Suggestion onCommit") }.font(.system(size: 14)).foregroundColor(Color(#colorLiteral(red: 0.82, green: 0.82, blue: 0.82, alpha: 1))) }.keyboardType(.emailAddress) .onTapGesture { self.isFocused = true } Spacer() }.padding(.leading) }.padding(.horizontal, 70) ZStack { RoundedRectangle(cornerRadius: 8) .fill(Color(#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1))) .frame(width: .infinity, height: 46) HStack { VStack(alignment: .leading) { TextField("Password", text: $password, onEditingChanged: { (changed) in print("Suggestion onEditingChanged - \(changed)") }) { print("Suggestion onCommit") }.font(.system(size: 14)).foregroundColor(Color(#colorLiteral(red: 0.82, green: 0.82, blue: 0.82, alpha: 1))) }.onTapGesture { self.isFocused = true } Spacer() }.padding(.leading) }.padding(.horizontal, 70) } NavigationLink(destination: NameInput()){ Text("Forgot Password?").font(.custom("Lato Medium", size: 12)).foregroundColor(Color(#colorLiteral(red: 0.09, green: 0.78, blue: 0.6, alpha: 1))).multilineTextAlignment(.center) .frame(width: nil, height: 15) //.padding(.bottom) } Button(action: { self.login() }) { SendLoginView() .padding(.top,20) .alert(isPresented: $showAlert) { Alert(title: Text("Error"), message: Text(self.alertMessage), dismissButton: .default(Text("OK"))) } } VStack { Button(action: { self.signupToggle.toggle() }) { Text("New to Dyana? Create an account.").font(.custom("Lato Medium", size: 12)).foregroundColor(Color(#colorLiteral(red: 0.09, green: 0.78, blue: 0.6, alpha: 1))).multilineTextAlignment(.center) .frame(width: .infinity, height: 15) .padding(.bottom) } } } ShapesView() if isLoading { LoadingView() } if isSuccessful { MainPageView() } }.offset(y: isFocused ? -300 : 0) .animation(.easeInOut) .onTapGesture { self.isFocused = false self.hideKeyboard() } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { LoginView() } } struct LoginLogo: View { var body: some View { VStack { Image("LoginLogo") .resizable() .aspectRatio(contentMode: .fill) .frame(width: 134, height: 45) .clipped() .frame(width: 134, height: 45) Spacer() } } } struct VinesView: View { var body: some View { VStack { //VINES Image("LoginVines") .resizable() .aspectRatio(contentMode: .fill) .frame(width: 500, height: 70) .clipped() .frame(width: .infinity, height: 45) } } } struct LoginTextView: View { var body: some View { VStack { Text("Log In").font(.system(size: 26)).fontWeight(.heavy).foregroundColor(Color(#colorLiteral(red: 0.1, green: 0.27, blue: 0.42, alpha: 1))).multilineTextAlignment(.center) } } } struct GoogleSignInView: View { var body: some View { ZStack { //GOOGLE SIGN IN RoundedRectangle(cornerRadius: 8) .fill(Color(#colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0))) .frame(width: .infinity, height: 46) RoundedRectangle(cornerRadius: 8) .strokeBorder(Color(#colorLiteral(red: 0.08627451211214066, green: 0.7803921699523926, blue: 0.6039215922355652, alpha: 1)), lineWidth: 1) .frame(width: .infinity, height: 46) HStack { //googlelogo 1 Image("LoginGoogleLogo") .resizable() .aspectRatio(contentMode: .fill) .frame(width: 29, height: 29) .clipped() .frame(width: 29, height: 29) .padding(.leading, 40) Spacer() //Continue with Google Text("Continue with Google").font(.system(size: 14)).foregroundColor(Color(#colorLiteral(red: 0.09, green: 0.78, blue: 0.6, alpha: 1))).multilineTextAlignment(.center) .padding(.trailing, 90) } }.padding(.horizontal, 70) } }
Comments