Can't get timers to work properly in widgets

Hi all. I have a timer working in a view on the Watch app, but I just can't get them working in widgets. Can you use timers in Home Screen & Lock Screen widgets? I can't find anything that says you can't...

Take this code:

struct ScratchPadView: View {
	@State var backgroundGradient: LinearGradient = gradientOne
	let gradientTimer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

	var body: some View {
		let date: Date = getDateFromString("20220828 10:00")

		ZStack {
			backgroundGradient
				.onReceive(gradientTimer) { _ in
					self.backgroundGradient = (date >= Date()) ? gradientOne : gradientTwo
				}
		}
	}
}

All this is supposed to do is change the gradient in the background from gradientOne to gradientTwo when the current date is after the date supplied. Doesn't work. The date can come and go and the gradient never changes from what it was initially set up to use: gradientOne.

Like I say, this works fine in a Watch app View, but just doesn't work in a widget.

Is the only alternative to provide a timeline entry for that date so the widget refreshes and notices that the date has now passed?

Can't get timers to work properly in widgets
 
 
Q