import SwiftUI import WidgetKit // MARK: - Timeline Entry struct TrioWatchComplicationEntry: TimelineEntry { let date: Date } // MARK: - Provider struct TrioWatchComplicationProvider: TimelineProvider { func placeholder(in _: Context) -> TrioWatchComplicationEntry { TrioWatchComplicationEntry(date: Date()) } func getSnapshot(in _: Context, completion: @escaping (TrioWatchComplicationEntry) -> Void) { let entry = TrioWatchComplicationEntry(date: Date()) completion(entry) } func getTimeline(in _: Context, completion: @escaping (Timeline) -> Void) { let entry = TrioWatchComplicationEntry(date: Date()) let timeline = Timeline(entries: [entry], policy: .never) completion(timeline) } } // MARK: - Views //// Displayed View Wrapper struct TrioWatchComplicationEntryView: View { @Environment(\.widgetFamily) private var widgetFamily var entry: TrioWatchComplicationEntry var body: some View { switch widgetFamily { case .accessoryCircular: TrioAccessoryCircularView(entry: entry) case .accessoryCorner: TrioAccessoryCornerView(entry: entry) default: Image("ComplicationIcon") .widgetAccentable() .widgetBackground(backgroundView: Color.clear) } } } /// Corner Complication struct TrioAccessoryCornerView: View { var entry: TrioWatchComplicationProvider.Entry var body: some View { Text("") .widgetCurvesContent() .widgetLabel { Text("Trio") } .widgetBackground(backgroundView: Color.clear) } } /// Circular Complication struct TrioAccessoryCircularView: View { var entry: TrioWatchComplicationProvider.Entry var body: some View { Image("ComplicationIcon") .resizable() .widgetAccentable() .widgetBackground(backgroundView: Color.clear) } } // MARK: - Widget Configuration @main struct TrioWatchComplication: Widget { let kind: String = "TrioWatchComplication" var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: TrioWatchComplicationProvider()) { entry in TrioWatchComplicationEntryView(entry: entry) } .configurationDisplayName("Trio") .description("Displays Trio app icon as complication") .supportedFamilies([ .accessoryCorner, .accessoryCircular ]) } } extension View { func widgetBackground(backgroundView: some View) -> some View { if #available(watchOS 10.0, iOSApplicationExtension 17.0, iOS 17.0, *) { return containerBackground(for: .widget) { backgroundView } } else { return background(backgroundView) } } }