// // NearFutureWidgetsLiveActivity.swift // NearFutureWidgets // // Created by Nihaal Sharma on 02/01/2025. // import ActivityKit import WidgetKit import SwiftUI struct NearFutureWidgetsAttributes: ActivityAttributes { public struct ContentState: Codable, Hashable { // Dynamic stateful properties about your activity go here! var emoji: String } // Fixed non-changing properties about your activity go here! var name: String } struct NearFutureWidgetsLiveActivity: Widget { var body: some WidgetConfiguration { ActivityConfiguration(for: NearFutureWidgetsAttributes.self) { context in // Lock screen/banner UI goes here VStack { Text("Hello \(context.state.emoji)") } .activityBackgroundTint(Color.cyan) .activitySystemActionForegroundColor(Color.black) } dynamicIsland: { context in DynamicIsland { // Expanded UI goes here. Compose the expanded UI through // various regions, like leading/trailing/center/bottom DynamicIslandExpandedRegion(.leading) { Text("Leading") } DynamicIslandExpandedRegion(.trailing) { Text("Trailing") } DynamicIslandExpandedRegion(.bottom) { Text("Bottom \(context.state.emoji)") // more content } } compactLeading: { Text("L") } compactTrailing: { Text("T \(context.state.emoji)") } minimal: { Text(context.state.emoji) } .widgetURL(URL(string: "http://www.apple.com")) .keylineTint(Color.red) } } } extension NearFutureWidgetsAttributes { fileprivate static var preview: NearFutureWidgetsAttributes { NearFutureWidgetsAttributes(name: "World") } } extension NearFutureWidgetsAttributes.ContentState { fileprivate static var smiley: NearFutureWidgetsAttributes.ContentState { NearFutureWidgetsAttributes.ContentState(emoji: "😀") } fileprivate static var starEyes: NearFutureWidgetsAttributes.ContentState { NearFutureWidgetsAttributes.ContentState(emoji: "🤩") } } #Preview("Notification", as: .content, using: NearFutureWidgetsAttributes.preview) { NearFutureWidgetsLiveActivity() } contentStates: { NearFutureWidgetsAttributes.ContentState.smiley NearFutureWidgetsAttributes.ContentState.starEyes }