-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathSFSymbolWidget.swift
More file actions
114 lines (92 loc) · 3.35 KB
/
Copy pathSFSymbolWidget.swift
File metadata and controls
114 lines (92 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//
// SFSymbolWidget.swift
// WidgetDemo
//
// Created by Itsuki on 2024/09/16.
//
import SwiftUI
import WidgetKit
struct SFSymbolWidgetView: View {
@Environment(\.widgetFamily) var widgetFamily
var entry: SFSymbolEntry
var body: some View {
let emojiStack = emojiStack()
VStack(spacing: 24) {
if (widgetFamily == .systemLarge || widgetFamily == .systemExtraLarge) {
emojiStack
}
if (widgetFamily == .systemSmall) {
Text("Hello!")
} else {
Text("Have a nice day!")
}
HStack(spacing: 16) {
Image(systemName: entry.symbolName)
VStack(alignment: .leading, spacing: 16) {
switch widgetFamily{
case .systemSmall:
Text("\(entry.date.formatted(date: .omitted, time: .shortened))")
case .systemMedium:
Text("\(entry.date.formatted(date: .abbreviated, time: .shortened))")
case .systemLarge:
Text("\(entry.date.formatted(date: .long, time: .omitted))")
Text("\(entry.date.formatted(date: .omitted, time: .standard))")
case .systemExtraLarge:
Text("\(entry.date.formatted(date: .omitted, time: .shortened))")
default:
Color.clear
}
}
}
if (widgetFamily == .systemLarge || widgetFamily == .systemExtraLarge) {
emojiStack
}
}
.containerBackground(for: .widget) {
if widgetFamily == .systemSmall {
Color.red.opacity(0.2)
} else {
VStack {
HStack {
Image(systemName: entry.symbolName)
Spacer()
Image(systemName: entry.symbolName)
}
Spacer()
HStack {
Image(systemName: entry.symbolName)
Spacer()
Image(systemName: entry.symbolName)
}
}
.padding(.all, 16)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.red.opacity(0.2))
}
}
.widgetURL(URL(string: "\(WidgetScheme.sfSymbolWidget):///"))
}
private func emojiStack() -> some View {
return HStack {
ForEach(0..<8) { _ in
Text("🤩")
}
}
}
}
struct SFSymbolWidget: Widget {
let kind: String = WidgetKind.sfSymbolWidget
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: SFSymbolProvider()) { entry in
SFSymbolWidgetView(entry: entry)
}
.description("SFSymbol Widget with current time!")
.configurationDisplayName("SFSymbol Widget")
.supportedFamilies([.systemSmall,.systemMedium, .systemLarge, .systemExtraLarge])
}
}
#Preview(as: .systemMedium) {
SFSymbolWidget()
} timeline: {
SFSymbolEntry(date: Date(), symbolName: SFSymbol.heart)
}