Řiďte Navigator 2.0 ze stavu.
declarative_nav vám umožňuje spravovat stránky a overlaye jako prostý stav bez přímého volání Navigator.push/pop nebo showDialog.
Stránky jako data
PageEntry neuchovává typy Widget. UI se vytváří pomocí callbacku vašeho resolveru.
Overlaye lokální pro obrazovku
Dialogy a sheety lze vymezit pro konkrétní obrazovku, včetně stavu lokálního pro tab, když je potřeba.
Nezávislé na správě stavu
Funguje se setState, Riverpod, Bloc, Provider nebo s libovolnou jinou vrstvou stavu.
První kroky
Nainstalujte balíček a poté přesuňte stránky a overlaye do explicitního stavu.
Instalace
Úvodní struktura
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,
);
}
}
Základní pravidlo
Nemíchejte imperativní push/pop a deklarativní List<PageEntry> pro stejný zásobník. Jeden zdroj pravdy zabraňuje odchylkám v navigaci.