Skip to main content
Glama
SettingsView.swift2.79 kB
// // SettingsView.swift // Playground // // Created by José Antonio Arellano Mendoza on 22/07/25. // import SwiftUI struct SettingsViewModel{ @AppStorage("onboardingCompelte") private var onboardingCompelte = false @AppStorage("didLogIn") private var loggedInUser: Bool = false @AppStorage("loggedInUserData") private var loggedInUserData: Data = Data() var user: User? { // return User(email: "email@example.com", fullname: "José Antonio Arellano Mendoza") guard loggedInUser else { return nil } let decoder = JSONDecoder() return try? decoder.decode(User.self, from: loggedInUserData) } func logout() { self.loggedInUserData = Data() self.loggedInUser = false } func resetOnboarding() { self.onboardingCompelte = false } } struct ElevatedCard: ViewModifier { func body(content: Content) -> some View { content .background(Color.white.opacity(0.95)) .clipShape(RoundedRectangle(cornerRadius: 10)) .shadow(color: Color.black.opacity(0.2), radius: 8, x: 5, y: 5) } } extension View { func cardStyled() -> some View { modifier(ElevatedCard()) } } struct SettingsView: View { let viewModel = SettingsViewModel() var body: some View { NavigationStack { VStack { if let user = viewModel.user { HStack { VStack(alignment: .leading) { Text(user.fullname) Text(user.email) } Spacer() Image(systemName: "person") .resizable() .frame(width: 44, height: 44) .foregroundColor(.black) } .padding() .background(Color.gray.opacity(0.1)) Divider() } else { Text("Not logged in") } ScrollView { VStack(alignment: .center, spacing: 30) { Text("Account actions") .font(.title2) .fontWeight(.semibold) .padding(.top) Button(role: .destructive) { viewModel.logout() } label: { Label("Logout", systemImage: "rectangle.portrait.and.arrow.forward") } .buttonStyle(.borderedProminent) .buttonBorderShape(.capsule) Button(role: .destructive) { viewModel.resetOnboarding() } label: { Label("Reset Onboarding State", systemImage: "trash") } .buttonStyle(.borderedProminent) .buttonBorderShape(.capsule) Text("") } .frame(maxWidth: .infinity) .background(Color.red.opacity(0.15)) .cardStyled() .padding() } } } } } #Preview { SettingsView() }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zillow/auto-mobile'

If you have feedback or need assistance with the MCP directory API, please join our Discord server