As a general rule, I avoid sharing VMs unless I have no other choice. I've realised that usually people tend to use a "ParentViewModel" just to keep track of some state, where this state could be passed around.
Instead, I prefer passing the state to my Fragments/Composables
Each piece of UI passing data to the next.
Also like Mikolaj said, you want to use sealed classes and model your state in such a way that makes it impossible to create these Fragments/Composables without the appropriate state