An 'easy' fix for this would be to base your seed (used by getRandom) on the current hour (more precisely, the time when your widget is not being refreshed).
That way, if your timeline is refreshed during the period when your displayed data should be the same, then your randomly returned object will always be the same.
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: