TeachMate/TeachMate/Views/Shared/PreviewExampleView.swift

131 lines
4.4 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// PreviewExampleView.swift
// TeachMate
//
// Created by Hongli on 2025/3/18.
//
import SwiftUI
import SwiftData
/// 使
///
struct PreviewExampleView: View {
@Environment(\.modelContext) private var modelContext
@Query private var semesters: [Semester]
var body: some View {
NavigationStack {
List {
Section("学期") {
ForEach(semesters) { semester in
HStack {
Text(semester.title)
.font(.headline)
Spacer()
if semester.isCurrent {
Text("当前")
.font(.caption)
.foregroundStyle(.secondary)
}
}
}
}
Section("使用预览数据的示例") {
NavigationLink("标准预览容器") {
Text("此视图使用 PreviewData.createContainer()")
.font(.headline)
}
NavigationLink("大数据集预览") {
Text("此视图使用 PreviewData.createLargeDataContainer()")
.font(.headline)
}
NavigationLink("空容器预览") {
Text("此视图使用 PreviewData.createEmptyContainer()")
.font(.headline)
}
}
Section("辅助方法示例") {
HStack {
Text("随机课程颜色:")
RoundedRectangle(cornerRadius: 4)
.fill(ColorFromHex(hex: PreviewData.randomCourseColor()))
.frame(width: 20, height: 20)
}
HStack {
Text("随机课程名称:")
Text(PreviewData.randomCourseName())
.foregroundStyle(.secondary)
}
HStack {
Text("随机教室位置:")
Text(PreviewData.randomLocation())
.foregroundStyle(.secondary)
}
HStack {
Text("随机班级:")
Text(PreviewData.randomClass())
.foregroundStyle(.secondary)
}
}
}
.navigationTitle("预览数据示例")
}
}
//
// ColorExtension.swift
private func ColorFromHex(hex: String) -> Color {
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
var int: UInt64 = 0
Scanner(string: hex).scanHexInt64(&int)
let a, r, g, b: UInt64
switch hex.count {
case 3: // RGB (12-bit)
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6: // RGB (24-bit)
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8: // ARGB (32-bit)
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (1, 1, 1, 0)
}
return Color(
.sRGB,
red: Double(r) / 255,
green: Double(g) / 255,
blue: Double(b) / 255,
opacity: Double(a) / 255
)
}
}
//
#Preview("标准预览") {
PreviewExampleView()
.modelContainer(PreviewData.createContainer())
}
//
#Preview("大数据集") {
PreviewExampleView()
.modelContainer(PreviewData.createLargeDataContainer())
}
//
#Preview("空容器") {
PreviewExampleView()
.modelContainer(PreviewData.createEmptyContainer())
}