ContentView.swift
// // ContentView.swift // DevSwiftUI // // Created by Cairocoders // import SwiftUI import Firebase import FirebaseStorage struct ContentView: View { @State var isLoginMode = false @State var email = "" @State var password = "" @State var fname = "" @State var lname = "" @State var StatusMessage = "" @State var shouldShowImagePicker = false @State var image: UIImage? var body: some View { NavigationView { ScrollView { VStack(spacing: 16) { Picker(selection: $isLoginMode, label: Text("Picker here")) { Text("Login") .tag(true) Text("Create Account") .tag(false) }.pickerStyle(SegmentedPickerStyle()) if !isLoginMode { Button { shouldShowImagePicker.toggle() } label: { VStack { Image(systemName: "person.fill") .font(.system(size: 64)) .padding() .foregroundColor(Color(.label)) } .overlay(RoundedRectangle(cornerRadius: 64) .stroke(Color.black, lineWidth: 3) ) } } if !isLoginMode { Group { TextField("First Name", text: $fname) TextField("Last Name", text: $lname) TextField("Email", text: $email) .keyboardType(.emailAddress) .autocapitalization(.none) SecureField("Password", text: $password) } .padding() .background(Color.white) .cornerRadius(10) Button { handleAction() } label: { HStack { Spacer() Text("Create Account") .foregroundColor(.white) .padding(.vertical, 10) .font(.system(size: 18, weight: .semibold)) Spacer() }.background(Color.green) }.cornerRadius(10) }else { Image("Login") .resizable() .scaledToFill() .frame(width: 128, height: 128) .cornerRadius(64) Group { TextField("Email", text: $email) .keyboardType(.emailAddress) .autocapitalization(.none) SecureField("Password", text: $password) } .padding() .background(Color.white) .cornerRadius(10) Button { loginUser() } label: { HStack { Spacer() Text("Login") .foregroundColor(.white) .padding(.vertical, 10) .font(.system(size: 18, weight: .semibold)) Spacer() }.background(Color.green) }.cornerRadius(10) } Text(self.StatusMessage) .foregroundColor(Color.white) } .padding() } //End ScrollView .navigationViewStyle(StackNavigationViewStyle()) .background( LinearGradient(gradient: Gradient(colors: [.blue, .gray]), startPoint: .top, endPoint: .bottom) .edgesIgnoringSafeArea(.all)) }// End Navigation } private func loginUser() { Auth.auth().signIn(withEmail: email, password: password) { result, err in if let err = err { print("Failed to login user:", err) self.StatusMessage = "Failed to login user: \(err)" return } print("Successfully logged in as user: \(result?.user.uid ?? "")") self.StatusMessage = "Successfully logged in as user: \(result?.user.uid ?? "")" } } private func handleAction() { createNewAccount() } private func createNewAccount() { Auth.auth().createUser(withEmail: email, password: password) { result, err in if let err = err { print("Failed to create user:", err) self.StatusMessage = "Failed to create user: \(err)" return } print("Successfully created user: \(result?.user.uid ?? "")") self.StatusMessage = "Successfully created user: \(result?.user.uid ?? "")" self.storeUserInformation() } } private func storeUserInformation() { guard let uid = Auth.auth().currentUser?.uid else { return } let userData = ["fname": self.fname, "lname": self.lname, "email": self.email, "uid": uid] Firestore.firestore().collection("users") .document(uid).setData(userData) { err in if let err = err { print(err) self.StatusMessage = "\(err)" return } print("Success") } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }DevSwiftUIApp.swift
// // DevSwiftUIApp.swift // DevSwiftUI // // Created by Cairocoders // import SwiftUI import Firebase @main struct DevSwiftUIApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { ContentView() } } } class AppDelegate: NSObject,UIApplicationDelegate{ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { FirebaseApp.configure() return true } }