I just saw how you're passing in the isValidValue function from WidgetViewModel, so this might be okay when done that way. But the word "state" is misleading if it's not always being loaded from the saved state.