The thing is, your app already has state – all apps are stateful. The real issue we’re talking about is where that state lives. If you think you don’t have state, that just means your state is being managed by someone else and hidden from you, and now you are responsible for keeping those separate state machines in sync manually by making the right imperative calls. There are multiple sources of truth.
E.g., by imperatively showing a dialog, you’re still updating some state somewhere to say a dialog is now showing. But because you don’t own that state yourself, you now have to also handle how to dismiss the dialog yourself. What happens if something happens that causes your app to navigate to an entirely different screen, and you forget to dismiss the dialog? What if you want to be notified when the dialog is showing or not, so you can update some UI on your main screen? You end up writing a bunch of code to synchronize the hidden system state machine with your own state machine(s). On the other hand, if you own the state about whether the dialog is showing, and just tell the system what that state is, there’s a single source of truth.