面向 Flutter 的声明式导航与叠层。
无需 Navigator.push/pop 或 showDialog,即可驱动 Navigator 2.0 页面与屏幕级本地叠层。
页面就是数据
PageEntry 仅存元数据,UI 由你的 resolver 生成。
屏幕级本地叠层
对话框和底部弹层按屏幕隔离,无需全局状态。
与状态解耦
可使用 setState、Riverpod、Bloc 或 Provider,无需依赖。
入门步骤
安装 declarative_nav,并通过 resolver 回调渲染页面。
安装
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。请从状态驱动导航和叠层。