Управлявайте Navigator 2.0 от състоянието.

declarative_nav ви позволява да управлявате страници и оверлеи като обикновено състояние, без да извиквате директно Navigator.push/pop или showDialog.

Страниците като данни

PageEntry не съдържа Widget типове. Потребителският интерфейс се изгражда чрез callback-а на вашия резолвер.

Локални за екрана оверлеи

Диалозите и панелите могат да се ограничават по екран, включително локално състояние за табовете, когато е нужно.

Независимо от управлението на състоянието

Работи със setState, Riverpod, Bloc, Provider или всеки друг слой за управление на състоянието.

Начален поток

Инсталирайте пакета, след което преместете страниците и оверлеите в явно състояние.

Инсталация

Начална структура

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,
    );
  }
}
Основно правило

Не смесвайте императивно push/pop и декларативен List<PageEntry> за един и същ стек. Поддържането на един източник на истина предотвратява разминаванията в навигацията.

Предишна

OSS

Следваща

Инсталация