S get state => _state;
Updates the State and notify to listeners and rebuild the widgets
state must be different of the current state
@protected set state(S newState) { _update(newState); }