Navigator: upravljanje ekranima u Flutteru

Аутор: IT Sectr Објављено: 2026-07-02 Време читања: 9 мин

Navigator — je vidžet-menadžer navigacije u Flutteru, koji upravlja stogom ruta (Route) za kretanje između ekrana putem metoda push, pop, pushReplacement i pushNamed. Za razliku od direktne zamene vidžeta kroz State, Navigator radi na nivou celih ekrana: čuva istoriju prelaza i podržava platformne animacije. Prema Flutter API Reference (2026), Navigator 2.0 (Router) pruža deklarativno upravljanje navigacijom za složene scenarije sa dubokim linkovima i adaptivnim dizajnom. U tipičnoj aplikaciji Navigator obezbeđuje ispravno ponašanje dugmeta „Nazad” na Androidu i prevlačenje gestova na iOS-u.

Glavno

  • Navigator — menadžer navigacije, koji upravlja stogom ruta kroz metode push, pop, pushNamed, pushReplacement i pushAndRemoveUntil
  • Stog ruta — Navigator čuva ekrane u LIFO stogu: svaki push dodaje ekran na vrh, pop uklanja gornji
  • pushNamed — navigacija po imenovanim rutama definisanim u MaterialApp.routes ili onGenerateRoute
  • pushReplacement — zamena trenutnog ekrana novim bez mogućnosti povratka na prethodni (npr. nakon prijave)
  • Navigator 2.0 — deklarativni API sa Router, RouterDelegate i RouteInformationParser za veb i desktop navigaciju

Šta je Navigator u Flutteru

Navigator — je vidžet koji upravlja stogom Route objekata i implementira ekransku navigaciju u Flutter aplikaciji. Svaki poziv push postavlja novi Route na vrh stoga, pop uklanja gornji Route i vraća se na prethodni ekran. MaterialApp automatski kreira Navigator za celu aplikaciju, čineći ga dostupnim kroz Navigator.of(context).

Za razliku od StatefulWidget, gde se zamena sadržaja dešava kroz setState unutar jednog vidžeta, Navigator operiše celim ekranima sa sopstvenim životnim ciklusom. Svaki Route u stogu je izolovano stanje sa sopstvenim BuildContext, što sprečava curenje memorije i pojednostavljuje upravljanje zavisnostima. Pri pozivu pop, neiskorišćeni Route se uništava, oslobađajući resurse.

Prema Flutter Navigation Guide (2026), Navigator je evoluirao od imperativnog API-ja (Navigator 1.0) do deklarativnog (Navigator 2.0). Navigator 1.0 koristi push/pop metode direktno, što je zgodno za jednostavne scenarije. Navigator 2.0 (Router) je pogodan za aplikacije sa dubokim linkovima, adaptivnom navigacijom i veb rutiranjem.

Kako Navigator radi ispod haube

Unutrašnje, Navigator koristi Overlay — specijalni vidžet koji prikazuje Route-ove jedan preko drugog. Svaki Route kreira svoju poziciju u Overlay-u sa Z-indeksom koji odgovara dubini u stogu. Ovo objašnjava zašto se pri push novi ekran animira iznad prethodnog, a pri pop — prethodni ekran je već spreman za prikaz: nije uništen, već je ostao u Overlay-u ispod novog.

Za animaciju prelaza, Navigator koristi PageTransitionsTheme, koji se može predefinisati u ThemeData. Platformne animacije se podešavaju kroz CupertinoPageRoute za iOS (prevlačenje s desna) i MaterialPageRoute za Android (prevlačenje odozdo). Navigator automatski bira ispravnu animaciju kada koristi PlatformRoute.

Navigator pruža skup metoda za upravljanje stogom Route. Svaka metoda rešava određeni zadatak navigacije — od jednostavnog prelaska do potpune zamene istorije ekrana. Razmotrimo glavne metode sa primerima upotrebe.

MetodaOpisScenarij primene
pushDodaje Route na vrh stogaPrelazak na novi ekran sa mogućnošću povratka
popUklanja gornji Route iz stogaPovratak na prethodni ekran
pushReplacementZamenjuje trenutni Route novimNakon prijave — ekran prijave se zamenjuje glavnim
pushAndRemoveUntilDodaje Route i uklanja prethodne do uslovaIzlazak na glavni ekran sa čišćenjem istorije
popUntilUklanja Route iz stoga do ispunjenja uslovaPovratak na određeni ekran u istoriji
maybePopPoziva pop samo ako stog sadrži >1 RouteSprečavanje zatvaranja aplikacije pri slučajnom pritisku

Push i Pop: osnovne operacije

Metoda push prihvata Route i vraća Future sa rezultatom prosleđenim pri pop. Ovo omogućava primanje podataka sa ekrana na koji smo prešli. Na primer, ekran za biranje datuma može vratiti DateTime kroz Navigator.pop(context, selectedDate). Metoda pop bez argumenta vraća null, sa argumentom — prosleđuje vrednost pozivajućem ekranu.

PushReplacement: zamena ekrana

pushReplacement zamenjuje trenutni Route novim, uklanjajući trenutni iz stoga. Ovo je ključno u scenarijima gde korisnik ne treba da se vrati na prethodni ekran. Tipičan primer — ekran prijave: nakon uspešne prijave, trenutni ekran se zamenjuje glavnim, a dugme „Nazad” se ne vraća na formular za prijavu.

Imenovane rute i onGenerateRoute

Navigator podržava navigaciju po imenovanim rutama kroz metod pushNamed. Umesto direktnog kreiranja Route, programer navodi tekstualni identifikator, a Navigator automatski kreira Route na osnovu konfiguracije u MaterialApp. Ovo pojednostavljuje kod i centralizuje definisanje ruta na jednom mestu.

Imenovane rute se definišu kroz svojstvo routes u MaterialApp, gde je svaki ključ putanja, a vrednost funkcija koja vraća Widget. Za dinamičke rute (sa parametrima) koristi se onGenerateRoute — callback koji prima RouteSettings i vraća Route. Ovo omogućava prosleđivanje argumenata kroz arguments i implementaciju duboke navigacije.

Prema Flutter Cookbook (2026), prosleđivanje argumenata kroz pushNamed se vrši pomoću parametra arguments: Object?. Prijemni ekran izvlači argumente kroz ModalRoute.of(context)!.settings.arguments, što obezbeđuje tipski bezbedan prenos podataka bez globalnih promenljivih ili InheritedWidget.

Obrada nepoznatih ruta

Svojstvo onUnknownRoute u MaterialApp obrađuje slučajeve kada je pushNamed pozvan sa nepostojećom rutom. Ovo je korisno za prikazivanje ekrana 404 ili preusmeravanje na glavnu stranicu. U kombinaciji sa onGenerateRoute, obezbeđuje potpuno pokrivanje svih mogućih navigacionih scenarija.

Navigator 2.0 (takođe poznat kao Router API) — je deklarativni pristup navigaciji, uveden u Flutter 2.0. Za razliku od imperativnog Navigator 1.0, gde programer poziva push/pop, Router upravlja navigacijom kroz stanje, automatski sinhronizujući URL pregledača sa trenutnim ekranom. Ovo je posebno važno za veb aplikacije i desktop verzije.

Arhitektura Navigator 2.0 sastoji se od tri ključne komponente: RouteInformationParser parsira URL u konfiguraciju rute, RouterDelegate pretvara konfiguraciju u listu Route, a BackButtonDispatcher obrađuje sistemsko dugme „Nazad”. Takva arhitektura čini navigaciju potpuno predvidljivom i testabilnom.

Za pojednostavljenje rada sa Navigator 2.0 postoje wrapper paketi: go_router (preporučen od Google-a), auto_route i beamer. go_router pruža deklarativni DSL za definisanje ruta sa podrškom za ugnežđenu navigaciju, preusmeravanja i duboke linkove bez ručne implementacije RouterDelegate. Prema pub.dev (2026), go_router se koristi u 35% novih Flutter projekata koji preferiraju deklarativni pristup.

Razmotrimo primer Navigator-a sa imenovanim rutama i prenosom podataka između ekrana. Kod demonstrira ekran liste proizvoda, prelazak na ekran detalja i povratak sa rezultatom.

dart
// Konfiguracija ruta u 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(),
    );
  },
)

// Navigacija sa prenosom podataka
final result = await Navigator.pushNamed(
  context,
  '/product',
  arguments: 'product_42',
);

// Dobijanje podataka na prijemnom ekranu
final args = ModalRoute.of(context)!.settings.arguments as String;

// Zameni ekran nakon prijave
Navigator.pushReplacementNamed(context, '/home');

// Očisti stog do glavnog ekrana
Navigator.pushNamedAndRemoveUntil(
  context,
  '/home',
  (route) => false,
);

U primeru, Navigator.pushNamed prosleđuje identifikator proizvoda ekranu detalja. Pri povratku kroz Navigator.pop(context, updatedProduct), pozivajući ekran dobija ažurirane podatke u promenljivoj result. pushReplacementNamed zamenjuje trenutni ekran nakon autorizacije, a pushNamedAndRemoveUntil sa uslovom (route) => false potpuno čisti stog, sprečavajući povratak na prethodne ekrane.

Često postavljana pitanja

Koja je razlika između Navigator 1.0 i Navigator 2.0?

Navigator 1.0 — imperativni API sa metodama push i pop, pogodan za jednostavne mobilne aplikacije. Navigator 2.0 — deklarativni API kroz Router, RouterDelegate i RouteInformationParser, neophodan za veb aplikacije sa URL rutiranjem, dubokim linkovima i adaptivnom navigacijom. Za praktične projekte preporučuje se go_router kao pojednostavljeni wrapper nad Navigator 2.0.

Kako preneti podatke između ekrana kroz Navigator?

Podaci se prenose kroz argument arguments u pushNamed ili direktno kroz konstruktor Route. Na prijemnom ekranu podaci se izvlače kroz ModalRoute.of(context)!.settings.arguments. Za vraćanje podataka koristite Navigator.pop(context, result) — pozivajući ekran će dobiti rezultat kao vrednost Future vraćenog iz push.

Zašto dugme „Nazad” ne vraća na prethodni ekran?

Ovo se dešava ako je trenutni ekran otvoren kroz pushReplacement, koji uklanja prethodni Route iz stoga. U ovom slučaju nema istorije navigacije, a dugme „Nazad” zatvara aplikaciju. Za povratak koristite običan push, a ne pushReplacement. Proverite takođe da se poziv Navigator.pop ispravno obrađuje na trenutnom ekranu.

Kako sprečiti povratak na prethodni ekran?

Koristite pushReplacement za zamenu trenutnog ekrana novim — prethodni ekran se uklanja iz stoga i ne možete mu se vratiti. Za potpuno čišćenje istorije koristite pushAndRemoveUntil sa uslovom (route) => false. Alternativno možete predefinisati WillPopScope (zastarelo) ili PopScope za presretanje sistemskog dugmeta „Nazad”.

Šta je go_router i kada ga koristiti?

go_router — je deklarativni navigacioni paket od Google-a, izgrađen na Navigator 2.0. Pruža jednostavan DSL za definisanje ruta sa podrškom za ugnežđavanje, preusmeravanja, duboke linkove i ShellRoute za BottomNavigationBar. Koristite go_router u novim projektima, posebno ako je potrebna veb podrška ili složeni navigacioni obrasci sa zaštićenim rutama.

Zaključak

  • Navigator — menadžer navigacije Flutter, koji upravlja stogom Route sa metodama push, pop, pushReplacement i pushAndRemoveUntil
  • LIFO stog — svaki push dodaje Route na vrh, pop uklanja gornji; stog čuva istoriju prelaza po principu „poslednji ušao, prvi izašao”
  • pushReplacement — zamena trenutnog ekrana bez mogućnosti povratka, ključno za scenarije prijave i onboardinga
  • Imenovane rute — pushNamed sa RouteSettings i onGenerateRoute za centralizovano definisanje ruta sa prosleđivanjem argumenata
  • Navigator 2.0 — deklarativna navigacija kroz Router, RouterDelegate i RouteInformationParser za veb duboke linkove
  • go_router — preporučeni Google wrapper nad Navigator 2.0 sa jednostavnim DSL-om i podrškom za ShellRoute
  • Prenos podataka — kroz arguments u pushNamed i vraćanje rezultata kroz Future iz push pomoću Navigator.pop(context, value)

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође