Декларативна навігація та оверлеї для Flutter.

Керуйте сторінками Navigator 2.0 і локальними оверлеями без Navigator.push/pop або showDialog.

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

PageEntry зберігає лише метадані. UI створюється вашим резолвером.

Локальні оверлеї

Діалоги та bottom sheet обмежені екраном без глобального стану.

Незалежно від стану

Використовуйте setState, Riverpod, Bloc або Provider. Залежності не потрібні.

Перші кроки

Встановіть declarative_nav і рендерьте сторінки через callback резолвера.

Встановлення

flutter pub add declarative_nav

Посібник з використання

app_root.dart
class AppRoot extends StatefulWidget {
  const AppRoot({super.key});

  @override
  State<AppRoot> createState() => _AppRootState();
}

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

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

  Widget buildPage(BuildContext context, PageEntry page) {
    return HomePage(onOpenDialog: _openDialog);
  }

  @override
  Widget build(BuildContext context) {
    return DeclarativePagesNavigator(
      pages: _pages,
      buildPage: buildPage,
      onPopTop: _popTop,
      canPopTop: () => _overlay == null,
    );
  }
}
Важлива примітка

Цей пакет уникає Navigator.push/pop і викликів showDialog. Керуйте навігацією та оверлеями зі стану.

Попередня

Огляд