Đ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

flutter pub add declarative_nav

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

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,
    );
  }
}
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.