The best place to trigger the API call to fetch full train details would be Screen B's ViewModel. You can have a common repository class for defining the calls and all, then you can inject the same into both the ViewModels (of Screen A and Screen B). Thereafter, just let the ViewModel change its own state (by relying on the concerned functions from the repository) and you will be good to go. The navigation flow will surely not be the right place to do the API call because that way you are violating the Single Responsibility Principle.