Navigasi deklaratif dan overlay untuk Flutter.
Kendalikan halaman Navigator 2.0 dan overlay lokal layar tanpa Navigator.push/pop atau showDialog.
Halaman adalah Data
PageEntry hanya menyimpan metadata. UI dibuat oleh resolver Anda.
Overlay Lokal Layar
Dialog dan bottom sheet dibatasi per layar tanpa status global.
Agnostik Status
Gunakan setState, Riverpod, Bloc, atau Provider. Tidak perlu dependensi.
Langkah Pertama
Instal declarative_nav dan render halaman dengan callback resolver.
Instalasi
flutter pub add declarative_nav
Panduan Penggunaan
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,
);
}
}
Catatan Penting
Paket ini menghindari Navigator.push/pop dan pemanggilan showDialog. Kendalikan navigasi dan overlay dari state.