add native examples
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import SwiftUI
|
||||
|
||||
struct TodoItemView: View {
|
||||
let todo: Todo
|
||||
let onToggle: () -> Void
|
||||
let onTap: () -> Void
|
||||
|
||||
var body: some View {
|
||||
Button(action: onTap) {
|
||||
HStack(spacing: 12) {
|
||||
// Checkbox toggle
|
||||
Button(action: onToggle) {
|
||||
Image(systemName: todo.completed ? "checkmark.circle.fill" : "circle")
|
||||
.font(.title2)
|
||||
.foregroundStyle(todo.completed ? Color.accentColor : Color(.systemGray3))
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
|
||||
// Title and metadata
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(todo.title)
|
||||
.font(.body)
|
||||
.strikethrough(todo.completed)
|
||||
.foregroundStyle(todo.completed ? .secondary : .primary)
|
||||
.lineLimit(2)
|
||||
.multilineTextAlignment(.leading)
|
||||
|
||||
HStack(spacing: 8) {
|
||||
// Category tag
|
||||
Text(todo.category)
|
||||
.font(.caption)
|
||||
.padding(.horizontal, 8)
|
||||
.padding(.vertical, 3)
|
||||
.background(
|
||||
Capsule()
|
||||
.fill(Color(.systemGray5))
|
||||
)
|
||||
.foregroundStyle(.secondary)
|
||||
|
||||
// Priority dot and label
|
||||
HStack(spacing: 4) {
|
||||
Circle()
|
||||
.fill(priorityColor(todo.priority))
|
||||
.frame(width: 8, height: 8)
|
||||
Text(todo.priority.displayName)
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
Image(systemName: "chevron.right")
|
||||
.font(.caption)
|
||||
.foregroundStyle(Color(.systemGray3))
|
||||
}
|
||||
.padding(.vertical, 8)
|
||||
.padding(.horizontal, 16)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
private func priorityColor(_ priority: Priority) -> Color {
|
||||
switch priority {
|
||||
case .low: return .green
|
||||
case .medium: return .orange
|
||||
case .high: return .red
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user