wonders/ios/WonderousWidget/WonderousWidget.swift

73 lines
2.8 KiB
Swift
Raw Normal View History

2023-10-19 11:29:48 -06:00
import WidgetKit
import SwiftUI
import Intents
/// Every home-widget requires a TimelineEntry. This is passed into the view and propvides any data it needs
2023-11-02 09:58:07 -06:00
struct WonderousTimelineEntry : TimelineEntry {
// Date is a mandatory field for all TimelineEntries
let date: Date
// Custom field for the wonderous view
let discoveredCount:Int;
var title:String = "";
var subTitle:String = "";
var imageData:String = "";
}
/// Widget, defines some high level configuration options as well as the primary view that will display the widget.
2023-10-19 11:29:48 -06:00
struct WonderousWidget: Widget {
let kind: String = "WonderousWidget"
var body: some WidgetConfiguration {
2023-11-02 09:58:07 -06:00
StaticConfiguration(kind: kind, provider: WonderousTimelineProvider()) { entry in
2023-10-19 11:29:48 -06:00
WonderousWidgetView(entry: entry)
}
2023-11-06 18:31:50 -07:00
.contentMarginsDisabled()
2023-10-19 11:29:48 -06:00
.configurationDisplayName("Wonderous Widget")
.description("Track your collected artifacts!")
.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
}
}
struct WonderousConfig {
let iosKey = "group.com.gskinner.flutter.wonders.widget"
let discoveredCountKey = "dicoveredCount"
}
/// TimelineProvider, returns various WonderousTimelineEntry configurations for different contexts
2023-11-02 09:58:07 -06:00
struct WonderousTimelineProvider: TimelineProvider {
2023-10-19 11:29:48 -06:00
// Provide an entry for a placeholder version of the widget
2023-11-02 09:58:07 -06:00
func placeholder(in context: Context) -> WonderousTimelineEntry {
WonderousTimelineEntry(date: Date(), discoveredCount: 0)
2023-10-19 11:29:48 -06:00
}
// Provide an entry for the current time and state of the widget
2023-11-02 09:58:07 -06:00
func getSnapshot(in context: Context, completion: @escaping (WonderousTimelineEntry) -> ()) {
let entry:WonderousTimelineEntry
let userDefaults = UserDefaults(suiteName: "group.com.gskinner.flutter.wonders.widget")
let discoveredCount = userDefaults?.integer(forKey: "discoveredCount") ?? 0
let title = userDefaults?.string(forKey: "lastDiscoveredTitle") ?? ""
let subTitle = userDefaults?.string(forKey: "lastDiscoveredSubTitle") ?? ""
let imageData = userDefaults?.string(forKey: "lastDiscoveredImageData") ?? ""
2023-11-02 09:58:07 -06:00
entry = WonderousTimelineEntry(
date: Date(),
discoveredCount:discoveredCount,
title: title,
subTitle: subTitle.prefix(1).capitalized + subTitle.dropFirst(),
imageData: imageData
)
2023-10-19 11:29:48 -06:00
completion(entry);
}
// Provide an array of entries for the current time and, optionally, any future times
2023-11-02 09:58:07 -06:00
func getTimeline(in context: Context, completion: @escaping (Timeline<WonderousTimelineEntry>) -> ()) {
2023-10-19 11:29:48 -06:00
getSnapshot(in: context) { (entry) in
let timeline = Timeline(entries: [entry], policy: .atEnd)
completion(timeline)
}
}
}