By Abdelrahman Saed — Senior Mobile Engineer. Last updated: 2026-08-10.
Navigation in Flutter moved from imperative Navigator 1.0 (push/pop) to declarative Navigator 2.0 (pages/configuration). The packages below make Navigator 2.0 usable with clean APIs.
Official Flutter team declarative routing package — URL-based, deep-linkable, redirect-aware.
Strengths:
Tradeoffs:
Best for: Any app that needs declarative routing, deep linking, or web support.
Production note: At iStoria, we use Navigator 1.0 (push/pop) with named routes because our routing needs are straightforward (140+ routes, but no deep linking). For new apps, go_router is the default I recommend.
Type-safe declarative routing with code generation — type-safe parameters and guards.
Strengths:
Tradeoffs:
Best for: Large apps with many routes that need type safety and complex navigation graphs.
Production note: I evaluated auto_route for iStoria. The type-safe parameters are excellent, but we stayed with named routes because 140+ routes were already wired. For a new large app, auto_route would be my choice.
go_router for any app that needs deep linking, web support, or declarative routing. Navigator 1.0 (push/pop with named routes) is fine for apps with simple, non-deep-linkable navigation. go_router is the Flutter team's recommendation for new apps.
Available for hire. Abdelrahman Saed is a Senior Mobile Engineer (Flutter) — open to full-time, fractional, contract, or advisory work. Hire me →
Book a 20-minute call · Download the CV (PDF) · See how I work