Đ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.