Introduce a Widget that abstracts the create/diff/patch cycle