Navigator: schermbeheer in Flutter

Auteur: IT Sectr Gepubliceerd: 2026-07-02 Leestijd: 9 min

Navigator — is een widget-navigatiemanager in Flutter die de stack van routes (Route) beheert voor het verplaatsen tussen schermen via push, pop, pushReplacement en pushNamed. In tegenstelling tot directe widgetvervanging via State, werkt Navigator op het niveau van volledige schermen: het bewaart de overgangsgeschiedenis en ondersteunt platformanimaties. Volgens Flutter API Reference (2026) biedt Navigator 2.0 (Router) declaratief navigatiebeheer voor complexe scenario’s met diepe links en adaptief ontwerp. In een typische app zorgt Navigator voor correct gedrag van de „Terug”-knop op Android en veeggebaren op iOS.

Belangrijkste punten

  • Navigator — navigatiemanager die de routestack beheert via push, pop, pushNamed, pushReplacement en pushAndRemoveUntil
  • Routestack — Navigator slaat schermen op in een LIFO-stack: elke push voegt een scherm bovenop toe, pop verwijdert de bovenste
  • pushNamed — navigatie via benoemde routes gedefinieerd in MaterialApp.routes of onGenerateRoute
  • pushReplacement — vervanging van het huidige scherm door een nieuw zonder terug te kunnen keren (bijv. na inloggen)
  • Navigator 2.0 — declaratieve API met Router, RouterDelegate en RouteInformationParser voor web- en desktopnavigatie

Wat is Navigator in Flutter

Navigator — is een widget die de stack van Route-objecten beheert en schermnavigatie implementeert in een Flutter-app. Elke push-aanroep plaatst een nieuwe Route bovenaan de stack, pop verwijdert de bovenste Route en keert terug naar het vorige scherm. MaterialApp maakt automatisch een Navigator voor de hele app en maakt deze toegankelijk via Navigator.of(context).

In tegenstelling tot StatefulWidget, waar inhoudsverandering plaatsvindt via setState binnen één widget, werkt Navigator met volledige schermen met een eigen levenscyclus. Elke Route in de stack is een geïsoleerde toestand met een eigen BuildContext, wat geheugenlekken voorkomt en afhankelijkheidsbeheer vereenvoudigt. Bij een pop-aanroep wordt de ongebruikte Route vernietigd, waardoor resources vrijkomen.

Volgens Flutter Navigation Guide (2026) is Navigator geëvolueerd van een imperatieve API (Navigator 1.0) naar een declaratieve (Navigator 2.0). Navigator 1.0 gebruikt push/pop-methoden direct, wat handig is voor eenvoudige scenario’s. Navigator 2.0 (Router) is geschikt voor apps met diepe links, adaptieve navigatie en webroutering.

Hoe Navigator onder de motorkap werkt

Intern gebruikt Navigator Overlay — een speciale widget die Routes boven elkaar weergeeft. Elke Route creëert zijn eigen positie in de Overlay met een Z-index die overeenkomt met de diepte in de stack. Dit verklaart waarom bij push het nieuwe scherm boven het vorige wordt geanimeerd, en bij pop — het vorige scherm al klaar is voor weergave: het is niet vernietigd, maar in de Overlay onder het nieuwe gebleven.

Voor overgangsanimaties gebruikt Navigator PageTransitionsTheme, dat kan worden overschreven in ThemeData. Platformanimaties worden ingesteld via CupertinoPageRoute voor iOS (vegen van rechts) en MaterialPageRoute voor Android (vegen van onder). Navigator selecteert automatisch de juiste animatie bij gebruik van PlatformRoute.

Navigator biedt een reeks methoden voor het beheren van de Route-stack. Elke methode lost een specifieke navigatietaak op — van een eenvoudige overgang tot volledige vervanging van de schermgeschiedenis. Laten we de belangrijkste methoden bekijken met gebruiksvoorbeelden.

MethodeBeschrijvingToepassingsscenario
pushVoegt Route bovenaan de stack toeNaar nieuw scherm met terugkeermogelijkheid
popVerwijdert bovenste Route uit stackTerugkeer naar vorig scherm
pushReplacementVervangt huidige Route door nieuweNa inloggen — inlogscherm vervangen door hoofdscherm
pushAndRemoveUntilVoegt Route toe en verwijdert vorige tot voorwaardeNaar hoofdscherm met wissen van geschiedenis
popUntilVerwijdert Routes uit stack tot voorwaarde is bereiktTerugkeer naar specifiek scherm in geschiedenis
maybePopRoept pop alleen aan als stack >1 Route bevatVoorkomen van app-sluiting bij per ongeluk indrukken

Push en Pop: basisbewerkingen

Methode push ontvangt een Route en retourneert een Future met het bij pop doorgegeven resultaat. Dit maakt het mogelijk gegevens te ontvangen van het scherm waarnaar is genavigeerd. Bijvoorbeeld, een datumkeuzescherm kan DateTime retourneren via Navigator.pop(context, selectedDate). Methode pop zonder argument retourneert null, met argument — geeft de waarde door aan het aanroepende scherm.

PushReplacement: schermvervanging

pushReplacement vervangt de huidige Route door een nieuwe, waarbij de huidige uit de stack wordt verwijderd. Dit is cruciaal in scenario’s waar de gebruiker niet naar het vorige scherm mag terugkeren. Een typisch voorbeeld — inlogscherm: na succesvol inloggen wordt het huidige scherm vervangen door het hoofdscherm, en de „Terug”-knop keert niet terug naar het inlogformulier.

Benoemde routes en onGenerateRoute

Navigator ondersteunt navigatie via benoemde routes met de methode pushNamed. In plaats van direct een Route te maken, geeft de ontwikkelaar een tekstuele identificatie op, en Navigator maakt automatisch een Route op basis van de configuratie in MaterialApp. Dit vereenvoudigt de code en centraliseert de routedefinitie op één plek.

Benoemde routes worden gedefinieerd via de eigenschap routes in MaterialApp, waar elke sleutel een padstring is en de waarde een functie die een Widget retourneert. Voor dynamische routes (met parameters) wordt onGenerateRoute gebruikt — een callback die RouteSettings ontvangt en een Route retourneert. Dit maakt het mogelijk argumenten door te geven via arguments en diepe navigatie te implementeren.

Volgens Flutter Cookbook (2026) worden argumenten via pushNamed doorgegeven met de parameter arguments: Object?. Het ontvangende scherm haalt argumenten op via ModalRoute.of(context)!.settings.arguments, wat typeveilige gegevensoverdracht garandeert zonder globale variabelen of InheritedWidget.

Afhandeling van onbekende routes

De eigenschap onUnknownRoute in MaterialApp handelt gevallen af waarin pushNamed wordt aangeroepen met een niet-bestaande route. Dit is handig voor het tonen van een 404-scherm of doorverwijzen naar de startpagina. In combinatie met onGenerateRoute zorgt het voor volledige dekking van alle mogelijke navigatiescenario’s.

Navigator 2.0 (ook bekend als Router API) — is een declaratieve benadering van navigatie, geïntroduceerd in Flutter 2.0. In tegenstelling tot imperatieve Navigator 1.0, waar de ontwikkelaar push/pop aanroept, beheert Router navigatie via status, waarbij de browser-URL automatisch wordt gesynchroniseerd met het huidige scherm. Dit is vooral belangrijk voor webapps en desktopversies.

De architectuur van Navigator 2.0 bestaat uit drie belangrijke componenten: RouteInformationParser parseert de URL naar een routeconfiguratie, RouterDelegate zet de configuratie om in een lijst van Routes, en BackButtonDispatcher handelt de systeem-„Terug”-knop af. Deze architectuur maakt navigatie volledig voorspelbaar en testbaar.

Om het werken met Navigator 2.0 te vereenvoudigen zijn er wrapper-pakketten: go_router (aanbevolen door Google), auto_route en beamer. go_router biedt een declaratieve DSL voor het definiëren van routes met ondersteuning voor geneste navigatie, redirects en diepe links zonder handmatige implementatie van RouterDelegate. Volgens pub.dev (2026) wordt go_router gebruikt in 35% van de nieuwe Flutter-projecten die de declaratieve benadering verkiezen.

Laten we een voorbeeld van Navigator bekijken met benoemde routes en gegevensoverdracht tussen schermen. De code demonstreert een productlijstscherm, overgang naar het detailscherm en terugkeer met resultaat.

dart
// Routeconfiguratie in MaterialApp
MaterialApp(
  initialRoute: '/',
  onGenerateRoute: (RouteSettings settings) {
    if (settings.name == '/') {
      return MaterialPageRoute(
        builder: (context) => const ProductListPage(),
      );
    }
    if (settings.name == '/product') {
      final productId = settings.arguments as String;
      return MaterialPageRoute(
        builder: (context) => ProductDetailPage(productId: productId),
      );
    }
    return MaterialPageRoute(
      builder: (context) => const NotFoundPage(),
    );
  },
)

// Navigatie met gegevensoverdracht
final result = await Navigator.pushNamed(
  context,
  '/product',
  arguments: 'product_42',
);

// Gegevens ophalen op ontvangend scherm
final args = ModalRoute.of(context)!.settings.arguments as String;

// Scherm vervangen na inloggen
Navigator.pushReplacementNamed(context, '/home');

// Stack wissen naar hoofdscherm
Navigator.pushNamedAndRemoveUntil(
  context,
  '/home',
  (route) => false,
);

In het voorbeeld geeft Navigator.pushNamed de productidentificatie door aan het detailscherm. Bij terugkeer via Navigator.pop(context, updatedProduct) ontvangt het aanroepende scherm de bijgewerkte gegevens in de variabele result. pushReplacementNamed vervangt het huidige scherm na autorisatie, en pushNamedAndRemoveUntil met de voorwaarde (route) => false wist de stack volledig, waardoor terugkeer naar vorige schermen wordt voorkomen.

Veelgestelde vragen

Wat is het verschil tussen Navigator 1.0 en Navigator 2.0?

Navigator 1.0 — imperatieve API met push- en pop-methoden, handig voor eenvoudige mobiele apps. Navigator 2.0 — declaratieve API via Router, RouterDelegate en RouteInformationParser, noodzakelijk voor webapps met URL-routering, diepe links en adaptieve navigatie. Voor praktische projecten wordt go_router aanbevolen als vereenvoudigde wrapper over Navigator 2.0.

Hoe gegevens overdragen tussen schermen via Navigator?

Gegevens worden doorgegeven via het argument arguments in pushNamed of direct via de Route-constructor. Op het ontvangende scherm worden gegevens opgehaald via ModalRoute.of(context)!.settings.arguments. Gebruik Navigator.pop(context, result) om gegevens terug te geven — het aanroepende scherm ontvangt het resultaat als Future-waarde van push.

Waarom keert de „Terug”-knop niet terug naar het vorige scherm?

Dit gebeurt als het huidige scherm is geopend via pushReplacement, die de vorige Route uit de stack verwijdert. In dit geval is er geen navigatiegeschiedenis en sluit de „Terug”-knop de app. Gebruik gewone push in plaats van pushReplacement om terug te keren. Controleer ook of de Navigator.pop-aanroep correct wordt afgehandeld op het huidige scherm.

Hoe terugkeer naar het vorige scherm voorkomen?

Gebruik pushReplacement om het huidige scherm te vervangen door een nieuw — het vorige scherm wordt uit de stack verwijderd en kan niet worden bereikt. Voor het volledig wissen van de geschiedenis gebruikt u pushAndRemoveUntil met de voorwaarde (route) => false. U kunt ook WillPopScope (verouderd) of PopScope overschrijven om de systeem-„Terug”-knop te onderscheppen.

Wat is go_router en wanneer gebruiken?

go_router — is een declaratief navigatiepakket van Google, gebouwd op Navigator 2.0. Het biedt een eenvoudige DSL voor het definiëren van routes met ondersteuning voor nesting, redirects, diepe links en ShellRoute voor BottomNavigationBar. Gebruik go_router in nieuwe projecten, vooral als webondersteuning of complexe navigatiepatronen met beveiligde routes nodig zijn.

Samenvatting

  • Navigator — Flutter-navigatiemanager die de Route-stack beheert met push, pop, pushReplacement en pushAndRemoveUntil
  • LIFO-stack — elke push voegt een Route bovenaan toe, pop verwijdert de bovenste; de stack bewaart de overgangsgeschiedenis volgens „last in, first out”
  • pushReplacement — vervanging van huidig scherm zonder terugkeermogelijkheid, cruciaal voor inlog- en onboarding-scenario’s
  • Benoemde routes — pushNamed met RouteSettings en onGenerateRoute voor gecentraliseerde routedefinitie met argumentoverdracht
  • Navigator 2.0 — declaratieve navigatie via Router, RouterDelegate en RouteInformationParser voor web-diepe links
  • go_router — door Google aanbevolen wrapper over Navigator 2.0 met eenvoudige DSL en ShellRoute-ondersteuning
  • Gegevensoverdracht — via arguments in pushNamed en resultaat teruggeven via Future van push met Navigator.pop(context, value)

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook