85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| //
 | |
| //  StepsWidget.swift
 | |
| //  StepsWidget
 | |
| //
 | |
| //  Created by Oliver Hnát on 04.12.2024.
 | |
| //
 | |
| 
 | |
| import WidgetKit
 | |
| import SwiftUI
 | |
| 
 | |
| struct StepsWidgetProvider: TimelineProvider {
 | |
|     func placeholder(in context: Context) -> SimpleEntry {
 | |
|         SimpleEntry(date: Date(), emoji: "😀")
 | |
|     }
 | |
| 
 | |
|     func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
 | |
|         let entry = SimpleEntry(date: Date(), emoji: "😀")
 | |
|         completion(entry)
 | |
|     }
 | |
| 
 | |
|     func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
 | |
|         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, emoji: "😀")
 | |
|             entries.append(entry)
 | |
|         }
 | |
| 
 | |
|         let timeline = Timeline(entries: entries, policy: .atEnd)
 | |
|         completion(timeline)
 | |
|     }
 | |
| 
 | |
| //    func relevances() async -> WidgetRelevances<Void> {
 | |
| //        // Generate a list containing the contexts this widget is relevant in.
 | |
| //    }
 | |
| }
 | |
| 
 | |
| struct SimpleEntry: TimelineEntry {
 | |
|     let date: Date
 | |
|     let emoji: String
 | |
| }
 | |
| 
 | |
| struct StepsWidgetEntryView : View {
 | |
|     var entry: StepsWidgetProvider.Entry
 | |
| 
 | |
|     var body: some View {
 | |
|         VStack {
 | |
|             Text("Time:")
 | |
|             Text(entry.date, style: .time)
 | |
| 
 | |
|             Text("Emoji:")
 | |
|             Text(entry.emoji)
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| struct StepsWidget: Widget {
 | |
|     let kind: String = "oliverhnat.StepMap.Steps"
 | |
| 
 | |
|     var body: some WidgetConfiguration {
 | |
|         StaticConfiguration(kind: kind, provider: StepsWidgetProvider()) { entry in
 | |
|             if #available(iOS 17.0, *) {
 | |
|                 StepsWidgetEntryView(entry: entry)
 | |
|                     .containerBackground(.fill.tertiary, for: .widget)
 | |
|             } else {
 | |
|                 StepsWidgetEntryView(entry: entry)
 | |
|                     .padding()
 | |
|                     .background()
 | |
|             }
 | |
|         }
 | |
|         .configurationDisplayName("Steps Widget")
 | |
|         .description("Widget that shows you your current step count.")
 | |
|     }
 | |
| }
 | |
| 
 | |
| #Preview(as: .systemSmall) {
 | |
|     StepsWidget()
 | |
| } timeline: {
 | |
|     SimpleEntry(date: .now, emoji: "😀")
 | |
|     SimpleEntry(date: .now, emoji: "🤩")
 | |
| }
 |