Valdykite „Navigator 2.0“ tiesiai iš programos būsenos.

„declarative_nav“ leidžia valdyti puslapius ir perdangas kaip paprastą būseną, tiesiogiai neiškviečiant „Navigator.push/pop“ ar „showDialog“.

Puslapiai kaip duomenys

„PageEntry“ nesaugo „Widget“ tipų. Naudotojo sąsaja (UI) sukuriama per jūsų resolverio atgalinį iškvietimą (callback).

Vietinės ekrano perdangos

Dialogų ir apatinių langų (sheets) taikymo sritis gali būti apribota ekranu, įskaitant skirtuko vietinę būseną.

Nepriklausoma nuo būsenos valdymo

Veikia su „setState“, „Riverpod“, „Bloc“, „Provider“ ar bet kuriuo kitu būsenos valdymo sluoksniu.

Darbo pradžios eiga

Įdiekite paketą, o tada perkelkite puslapius ir perdangas į aiškiai apibrėžtą būseną.

Diegimas

Pradinė kodo struktūra

class AppRootState extends State<AppRoot> {
  OverlayRequest? _overlay;
  late List<PageEntry> _pages;

  @override
  void initState() {
    super.initState();
    _pages = const [PageEntry(key: 'home', name: '/home')];
  }

  Widget build(BuildContext context) {
    return DeclarativePagesNavigator(
      pages: _pages,
      buildPage: _buildPage,
      onPopTop: _popTop,
      canPopTop: () => _overlay == null,
    );
  }
}
Pagrindinė taisyklė

Nemaišykite imperatyvaus push/pop ir deklaratyvaus List<PageEntry> tam pačiam stekui. Vieno teisingumo šaltinio (source of truth) išlaikymas apsaugo nuo navigacijos būsenos nukrypimų.

Ankstesnis

OSS