How to apply the MVVM pattern in this case?
I would like to offer a different implementation angle.
IMO, you should have only one view model for every activity. You could, for example, have several top level Composables that each represent a screen in itself and then switching between them is as trivial as changing a state enum in your view model that says which screen you currently want to show.
But, if you insist on having several view models, i won't stop you... So:
instead of having the App.kt
to show the bottom bar at all times,
create a public global Composable and a BaseViewModel
class that contain the bottom bar functionality logic.
Extend BaseViewModel
with your view models and call your public Composable in your views.
If there's any shared state in the bottom bar you can keep it in your BaseViewModel companion object or another shared object.
I assume that the bottom bar composable interacts with the view model, so it can accept it in the parameters.