// // SettingsView.swift // punchnet // // Created by 安礼成 on 2026/1/16. // import SwiftUI struct SettingsView: View { @State private var state = SettingsState() var body: some View { NavigationSplitView { List { SettingsMenuItemView(title: "账号", .accout, state: state) SettingsMenuItemView(title: "网络", .network, state: state) SettingsMenuItemView(title: "设备", .device, state: state) SettingsMenuItemView(title: "软件", .system, state: state) SettingsMenuItemView(title: "关于", .about, state: state) } .listStyle(.sidebar) .border(Color.red) } detail: { VStack(alignment: .leading, spacing: 0) { switch self.state.currentMeun { case .accout: SettingsAccountView(state: self.state) case .network: SettingsNetworkView(state: self.state) case .device: SettingsDeviceView() case .system: SettingsSystemView() case .about: SettingsAboutView() } Spacer() } .padding() .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) } } } struct SettingsMenuItemView: View { var title: String var role: SettingsState.MenuItem @Bindable var state: SettingsState init(title: String, _ role: SettingsState.MenuItem, state: SettingsState) { self.title = title self.role = role self.state = state } var body: some View { HStack(alignment: .center) { Rectangle() .frame(width: 3, height: 25) .foregroundColor(self.state.currentMeun == role ? .black : .clear) Text(title) .onTapGesture { self.state.currentMeun = self.role } } } } #Preview { SettingsView() }