HomeiOS Developmentios - Why does my view not change after printed variable is...

ios – Why does my view not change after printed variable is up to date?


As soon as a consumer logs in to my app, I wish to change the view from SignInView to AppShellView. The authData variable updates completely superb in UserViewModel as soon as it receives knowledge from the API (checked in UserViewModel by way of print assertion) however this replace is just not being mirrored in ContentView because it all the time reveals the SignInView.

Why is authData not being up to date in ContentView?

UserViewModel:

import SwiftUI

struct LoginRequestBody: Codable {
    let e-mail: String
    let password: String
}

struct AuthData: Codable {
    let token: String
    let loggedInUser: Consumer
}

class UserViewModel: ObservableObject {
    // MARK: - PROPERTIES

    @Revealed var authData: AuthData?
    
    // MARK: - FUNCTIONS
    
    func signIn(e-mail: String, password: String) {
        guard let url = URL(string: "http://localhost:4000/api/customers/login") else {
            return
        }
        
        let physique = LoginRequestBody(e-mail: e-mail, password: password)
        
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.addValue("utility/json", forHTTPHeaderField: "Content material-Sort")
        request.httpBody = strive? JSONEncoder().encode(physique)
        
        URLSession.shared.dataTask(with: request) { [self] knowledge, response, error in
            guard let knowledge = knowledge, error == nil else {
                return
            }

            guard let loginResponse = strive? JSONDecoder().decode(AuthData.self, from: knowledge) else {
                return
            }
            
            self.authData = loginResponse
            
            if let encoded = strive? JSONEncoder().encode(self.authData) {
                let defaults = UserDefaults.customary
                defaults.set(encoded, forKey: "authData")
            }
        }.resume()
    }
}

ContentView:

import SwiftUI

struct ContentView: View {
    @ObservedObject var userViewModel = UserViewModel()
    
    var physique: some View {
        if userViewModel.authData != nil {
            AppShellView()
        } else {
            SignInView()
        }
    }
}

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments