// // ContentView.swift // DemoAlertBug // // Created by Steve on 8/8/24. // import SwiftUI enum MeditationType: String, CaseIterable { case focus, calm, energy } struct ContentView: View { @State private var selectedMeditation: MeditationType? @State private var showAlert = false @State private var counter = 0 let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect() var body: some View { VStack { Text("Select a Meditation to display alert") .font(.title) ForEach(MeditationType.allCases, id: \.self) { meditationType in Button(meditationType.rawValue.capitalized) { selectMeditation(meditationType) } .padding() .background(Color.blue) .foregroundColor(.white) .cornerRadius(10) } Text("Counter: \(counter)") .font(.caption) } .onChange(of: selectedMeditation) { _ in checkAndProceed() } .alert(isPresented: $showAlert) { Alert( title: Text("Sensor Status"), message: Text("Please adjust the device. Sensors are not detecting properly."), dismissButton: .default(Text("OK")) { selectedMeditation = nil print("Alert dismissed, selectedMeditation set to nil") } ) } .onReceive(timer) { _ in self.counter += 1 if counter % 100 == 0 { // Perform some "heavy" work every 100 ticks let _ = (0...10000).map { _ in arc4random() } } } } private func selectMeditation(_ meditation: MeditationType) { selectedMeditation = meditation print("Meditation selected: \(meditation.rawValue)") } private func checkAndProceed() { guard let meditation = selectedMeditation else { return } print("Checking sensor status for \(meditation.rawValue)") if !isSensorStatusGood() { print("Sensor status not good, showing alert") showAlert = true } else { print("Proceeding with meditation: \(meditation.rawValue)") selectedMeditation = nil } } private func isSensorStatusGood() -> Bool { return false // Always return false to ensure the alert is shown } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } #Preview { ContentView() }