import SwiftUI import WidgetKit /// 语记复杂功能:显示今日速记数,点一下打开手表 App 开始录音。 /// 放进 Widget Extension target;今日数读的是手表本地 UserDefaults(与 WatchSessionManager 共用 key)。 struct YuJiEntry: TimelineEntry { let date: Date let count: Int } struct YuJiProvider: TimelineProvider { func placeholder(in context: Context) -> YuJiEntry { YuJiEntry(date: Date(), count: 3) } func getSnapshot(in context: Context, completion: @escaping (YuJiEntry) -> Void) { completion(YuJiEntry(date: Date(), count: WatchSessionManager.loadTodayCount())) } func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { let entry = YuJiEntry(date: Date(), count: WatchSessionManager.loadTodayCount()) let nextMidnight = Calendar.current.startOfDay(for: Date().addingTimeInterval(86400)) completion(Timeline(entries: [entry], policy: .after(nextMidnight))) } } struct YuJiComplicationView: View { @Environment(\.widgetFamily) private var family var entry: YuJiEntry var body: some View { switch family { case .accessoryCircular: ZStack { AccessoryWidgetBackground() VStack(spacing: 0) { Image(systemName: "mic.fill").font(.caption2) Text("\(entry.count)").font(.headline) } } case .accessoryRectangular: HStack { Image(systemName: "mic.fill") VStack(alignment: .leading) { Text("语记").font(.caption2) Text("今日 \(entry.count) 条").font(.caption) } } default: HStack(spacing: 2) { Image(systemName: "mic.fill").font(.caption2) Text("\(entry.count)").font(.caption) } } } } struct YuJiComplicationWidget: Widget { var body: some WidgetConfiguration { StaticConfiguration(kind: "YuJiComplication", provider: YuJiProvider()) { entry in YuJiComplicationView(entry: entry) } .configurationDisplayName("语记") .description("今日速记数,点一下开始录音") .supportedFamilies([.accessoryCircular, .accessoryRectangular, .accessoryInline]) } } @main struct YuJiWidgets: WidgetBundle { var body: some Widget { YuJiComplicationWidget() } }