Điều hướng khai báo và overlay cho Flutter.

Điều khiển trang Navigator 2.0 và overlay cục bộ theo màn hình mà không cần Navigator.push/pop hoặc showDialog.

Trang là dữ liệu

PageEntry chỉ lưu metadata. UI được tạo bởi resolver của bạn.

Overlay cục bộ theo màn hình

Hộp thoại và bottom sheet bị giới hạn theo từng màn hình mà không cần trạng thái toàn cục.

Không phụ thuộc trạng thái

Dùng setState, Riverpod, Bloc hoặc Provider. Không cần phụ thuộc.

Bước đầu

Cài đặt declarative_nav và render trang bằng resolver callback.

Cài đặt

Hướng dẫn sử dụng

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,
    );
  }
}
Lưu ý quan trọng

Gói này tránh Navigator.push/pop và các lệnh gọi showDialog. Hãy điều khiển điều hướng và overlay từ trạng thái.