我在UserDefaults中有一个布尔值来检查用户是否已登录。
在我的第一页中,当用户点击个人资料图片时,会显示一个模态框(使用.sheet),里面有一个用于用户注销的按钮。
当用户按下注销按钮并关闭模态框后,我该如何改变视图呢?
或者说,当用户按下注销按钮并关闭模态框后,我该如何重新加载主页面以检查新的布尔值?
struct Home: View {
var body: some View {
ScrollView {
VStack {
// MARK: Header
Header(title: "Home")
}
Spacer()
}
.padding(20)
}
}
struct Header: View {
public var title: String = ""
@State private var showProfile = false
var body: some View {
HStack {
// MARK: - User Profile
Image("profile")
.resizable()
.clipShape(Circle())
.frame(width: 50, height: 50)
.onTapGesture {
print("⚠️ Profile has been tapped.")
self.showProfile.toggle()
}
.sheet(isPresented: $showProfile) {
Account(showProfile: self.$showProfile)
}
}
}
}
struct Account: View {
@Binding var showProfile: Bool
var body: some View {
NavigationView {
// MARK: - Account Sections
List {
// MARK: - Log Out -
Section {
Button(action: {
print("❌ User has been logged out.")
self.showProfile.toggle()
}) {
Text("Log Out")
.bold()
.foregroundColor(.red)
}
}
}
// MARK: - NavigationBar Settings
.navigationBarTitle("Account", displayMode: .inline)
}
}
}
这是我的UserDefault类
class UsersSettings: ObservableObject {
@Published var isLoggedIn: Bool = UserDefaults.standard.bool(forKey: "isLogged") {
didSet {
UserDefaults.standard.set(self.isLoggedIn, forKey: "isLogged")
print(UserDefaults.standard.bool(forKey: "isLogged"))
}
}
}