Question: How can I go from Login() back to the Home() without restarting the app/preview? I have a feeling it has to do with the variable not being @State but I don't know how to make add @State to a global variable.
Here is my code:
import SwiftUI
var isLoggedIn:Bool {
get {
// Get the standard UserDefaults as "defaults"
let defaults = UserDefaults.standard
// Makes the "welcomeString" variable whatever the saved value for "welcome_string" is
return defaults.bool(forKey: "isLoggedIn")
}
set (newValue) {
// Get the standard UserDefaults as "defaults"
let defaults = UserDefaults.standard
// Saves what the "welcomeString" variable was just set to as the saved value for "welcome_string"
defaults.set(newValue, forKey: "isLoggedIn")
}
}
struct ContentView: View {
var body: some View {
if isLoggedIn {
Home()
} else {
Login()
}
}
}
struct Login: View {
var body: some View {
Button(action: {
isLoggedIn = true
}) {
Text("Click to login")
}
}
}
struct Home: View {
private enum Tab: Hashable {
case schedule
case messaging
case home
case resources
case settings
}
@State private var selectedTab: Tab = .home
var body: some View {
VStack {
TabView(selection: $selectedTab) {
One()
.tag(Tab.home)
.tabItem {
Label("One", systemImage: "note")
}
Two()
.tag(Tab.home)
.tabItem {
Label("Two", systemImage: "note")
}
Three()
.tag(Tab.home)
.tabItem {
Label("Three", systemImage: "note")
}
Four()
.tag(Tab.home)
.tabItem {
Label("Four", systemImage: "note")
}
}
}
}
}
struct One: View {
var body: some View {
Text("One")
}
}
struct Two: View {
var body: some View {
Text("Two")
}
}
struct Three: View {
var body: some View {
Text("Three")
}
}
struct Four: View {
var body: some View {
Button(action: {
isLoggedIn = false
}) {
Text("Logout")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}