Conectar el servicio
IsselNavigationService encapsula la pila imperativa de Navigator mediante una clave estable. IsselAppController.navigation ya proporciona una instancia; conéctala a MaterialApp.navigatorKey, como en la primera app, y reutilízala desde presentación.
También puedes construir un servicio directamente si tu composición lo requiere:
isReady es true cuando navigatorKey.currentState no es null; es decir, cuando el Navigator al que conectaste la clave ya está montado en el árbol de widgets. Antes de montar MaterialApp o si la clave no está conectada, vale false. Esta señal solo confirma que el Navigator está disponible: canGoBack puede seguir siendo false cuando estás en la ruta raíz. Si llamas a una operación de navegación antes del montaje, el servicio lanza StateError; no guarda ni descarta la acción para ejecutarla después. El servicio se crea por instancia, no es un singleton global y no registra destinos: tu aplicación decide qué Widget o Route empujar.
Operaciones
Las operaciones que crean
MaterialPageRoute admiten settings y fullscreenDialog. Si no envías nombre, el servicio usa page.runtimeType.toString(). Para productos con metadatos de ruta, configura nombres explícitos.
Resultado tipado completo
El archivo siguiente contiene una página de selección y una vista que recibe su resultado. Usa el servicio de la raíz; muestraTypedNavigationExample(navigation: app.navigation) como contenido de una ruta montada.
null. La vista caller comprueba mounted antes de actualizar su estado.
Reemplazar y limpiar la pila
false. No esperes un Future de navegación para ejecutar tareas que deban suceder mientras la ruta permanece abierta.
Retroceso y bloqueos
goBack devuelve si la solicitud fue atendida. Un PopScope(canPop: false) puede atenderla y conservar la ruta, por lo que true no significa siempre que se haya retirado una pantalla. Para decidir si el botón Volver debe aparecer, utiliza la pila real; para confirmar salida con datos sin guardar, la política pertenece a la vista y su PopScope.
En móvil una raíz con Drawer puede mostrar hamburguesa y una ruta secundaria retroceso. En escritorio abrir/cerrar menú y volver son acciones distintas. No deduzcas retroceso sólo por presencia de Drawer o de un sidebar.
Router, selección y URLs
El kit no sincroniza automáticamente menú ni breadcrumbs con la pila. DerivaselectedId de la ruta activa mediante el router existente o un NavigatorObserver de la app. Un estado de selección que cambia sólo al tocar el menú queda desactualizado al hacer pop, reemplazar o recibir navegación externa.
Cuando necesites URLs, deep links o pila declarativa, conserva o elige el router adecuado al producto. IsselNavigationService no ofrece enrutamiento web ni parseo de URLs. La guía oficial de navegación Flutter explica la elección entre Navigator y Router.
Navegación y Widgets pertenecen a presentación/composición. El controlador devuelve resultados del negocio; dominio y repositorios no reciben destinos ni BuildContext.