// // WaterWidget.swift // WaterWidget // // Created by richard on 2025/9/9. // import WidgetKit import SwiftUI struct Provider: AppIntentTimelineProvider { func placeholder(in context: Context) -> SimpleEntry { SimpleEntry(date: Date(), configuration: ConfigurationAppIntent()) } func snapshot(for configuration: ConfigurationAppIntent, in context: Context) async -> SimpleEntry { SimpleEntry(date: Date(), configuration: configuration) } func timeline(for configuration: ConfigurationAppIntent, in context: Context) async -> Timeline { var entries: [SimpleEntry] = [] // Generate a timeline consisting of five entries an hour apart, starting from the current date. let currentDate = Date() for hourOffset in 0 ..< 5 { let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! let entry = SimpleEntry(date: entryDate, configuration: configuration) entries.append(entry) } return Timeline(entries: entries, policy: .atEnd) } // func relevances() async -> WidgetRelevances { // // Generate a list containing the contexts this widget is relevant in. // } } struct SimpleEntry: TimelineEntry { let date: Date let configuration: ConfigurationAppIntent } struct WaterWidgetEntryView : View { var entry: Provider.Entry var body: some View { VStack { Text("Time:") Text(entry.date, style: .time) Text("Favorite Emoji:") Text(entry.configuration.favoriteEmoji) } } } struct WaterWidget: Widget { let kind: String = "WaterWidget" var body: some WidgetConfiguration { AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in WaterWidgetEntryView(entry: entry) .containerBackground(.fill.tertiary, for: .widget) } } } extension ConfigurationAppIntent { fileprivate static var smiley: ConfigurationAppIntent { let intent = ConfigurationAppIntent() intent.favoriteEmoji = "😀" return intent } fileprivate static var starEyes: ConfigurationAppIntent { let intent = ConfigurationAppIntent() intent.favoriteEmoji = "🤩" return intent } } #Preview(as: .systemSmall) { WaterWidget() } timeline: { SimpleEntry(date: .now, configuration: .smiley) SimpleEntry(date: .now, configuration: .starEyes) }