Files
LoveLiveMusicPlayerKMP/iosApp/WidgetExtension/HomeWidgetExampleControl.swift
T
2026-08-30 19:36:25 +08:00

82 lines
2.1 KiB
Swift

//
// HomeWidgetExampleControl.swift
// HomeWidgetExample
//
// Created by hoshizora-rin on 2024/9/19.
//
import AppIntents
import SwiftUI
import WidgetKit
@available(iOS 18.0, *)
struct HomeWidgetExampleControl: ControlWidget {
static let kind: String = "com.zhushenwudi.lovelivemusicplayer.HomeWidgetExample"
var body: some ControlWidgetConfiguration {
AppIntentControlConfiguration(
kind: Self.kind,
provider: Provider()
) { value in
ControlWidgetToggle(
"Start Timer",
isOn: value.isRunning,
action: StartTimerIntent(value.name)
) { isRunning in
Label(isRunning ? "On" : "Off", systemImage: "timer")
}
}
.displayName("Timer")
.description("A an example control that runs a timer.")
}
}
@available(iOS 18.0, *)
extension HomeWidgetExampleControl {
struct Value {
var isRunning: Bool
var name: String
}
struct Provider: AppIntentControlValueProvider {
func previewValue(configuration: TimerConfiguration) -> Value {
HomeWidgetExampleControl.Value(isRunning: false, name: configuration.timerName)
}
func currentValue(configuration: TimerConfiguration) async throws -> Value {
let isRunning = true // Check if the timer is running
return HomeWidgetExampleControl.Value(isRunning: isRunning, name: configuration.timerName)
}
}
}
@available(iOS 18.0, *)
struct TimerConfiguration: ControlConfigurationIntent {
static let title: LocalizedStringResource = "Timer Name Configuration"
@Parameter(title: "Timer Name", default: "Timer")
var timerName: String
}
@available(iOS 18.0, *)
struct StartTimerIntent: SetValueIntent {
static let title: LocalizedStringResource = "Start a timer"
@Parameter(title: "Timer Name")
var name: String
@Parameter(title: "Timer is running")
var value: Bool
init() {}
init(_ name: String) {
self.name = name
}
func perform() async throws -> some IntentResult {
// Start the timer…
return .result()
}
}