import SwiftUI
struct TodoListView: View {
@StateObject private var viewModel: TodoListViewModel
init(viewModel: TodoListViewModel) {
_viewModel = StateObject(
wrappedValue: viewModel
)
}
var body: some View {
NavigationStack {
Group {
if viewModel.isLoading {
ProgressView()
} else {
List(viewModel.todos) { todo in
HStack {
Image(
systemName: todo.completed
? "checkmark.circle.fill"
: "circle"
)
Text(todo.title)
}
}
}
}
.navigationTitle("Todos")
.task {
viewModel.loadTodos()
}
.alert(
"Error",
isPresented: .constant(
viewModel.errorMessage != nil
)
) {
Button("OK") {}
} message: {
Text(viewModel.errorMessage ?? "")
}
}
}
}
@main
struct TodoAppApp: App {
let persistenceController = PersistenceController.shared
private let container = AppContainer()
var body: some Scene {
WindowGroup {
TodoListView(
viewModel: TodoListViewModel(
repository: container.todoRepository
)
)
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
}
}
Read the original article and join the discussion on Dev.to
Read on Dev.to