I didn’t notice what was changed in the updated version. The code samples still feel like there is a lot of “pushes” to the navigator, instead of modifying the state. For example, if we click on a deeplink, we parse its content, get the entity ID, then instead of pushing the new route with this information we just change the state. The router should receive a notification, that the entity details are available and update its routes correspondingly.
I think your approach is also valid, but I would prefer another approach when the widgets are not required to have a link to the router. Basically, we just need an intermediate layer between the widgets and the router. This layer is basically a state. I think this little change will make the router more declarative.