Hello, I have the same issue. Here is my code.
import SwiftUI
struct ContentView: View {
@State private var tasks = [Task]()
@State private var showAddTask = false
@State private var isSignedIn = false
@State private var userID = ""
var body: some View {
NavigationView {
List {
ForEach(tasks.filter { $0.userID == userID }) { task in
TaskCell(task: task)
}
.onDelete(perform: delete)
}
.navigationBarTitle("Tasks")
.navigationBarItems(trailing: Button(action: {
self.showAddTask = true
}) {
Image(systemName: "plus")
})
.sheet(isPresented: $showAddTask) {
AddTaskView(tasks: self.$tasks)
}
}
.navigationViewStyle(StackNavigationViewStyle())
.navigate(to: SignInView(), when: $isSignedIn)
}
func delete(at offsets: IndexSet) {
tasks.remove(atOffsets: offsets)
}
}
struct TaskCell: View {
var task: Task
var body: some View {
HStack {
VStack(alignment: .leading) {
Text(task.title)
.font(.headline)
Text(task.category)
.font(.subheadline)
}
Spacer()
Text(task.formattedDate)
.font(.subheadline)
}
}
}
struct AddTaskView: View {
@Binding var tasks: [Task]
@State private var title = ""
@State private var category = ""
@State private var date = Date()
@State private var reminder = false
@State private var showDatePicker = false
@State private var userID = ""
var body: some View {
Form {
TextField("Title", text: $title)
TextField("Category", text: $category)
Toggle(isOn: $reminder) {
Text("Set Reminder")
}
if reminder {
DatePicker(selection: $date, displayedComponents: .dateAndTime, label: { Text("Date") })
.datePickerStyle(WheelDatePickerStyle())
}
Button(action: {
let task = Task(title: self.title, category: self.category, date: self.date, reminder: self.reminder, userID: self.userID)
self.tasks.append(task)
self.title = ""
self.category = ""
self.reminder = false
self.date = Date()
}) {
Text("Add Task")
}
}
}
func onAppear() {
userID = UserDefaults.standard.string(forKey: "userID") ?? ""
}
}
struct Task: Identifiable {
var id: String { return title }
var title: String
var category: String
var date: Date
var reminder: Bool
var userID: String
var formattedDate: String {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
return formatter.string(from: date)
}
}