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ų.