采用 Naigator 2.0
- 压入或弹出多个界面
- 中间界面移除,交互
- 嵌套路由
- 声明式API
- 提供了解析web url路由的功能
demo功能,从A跳转B,然后B返回A
RouterDelegate
小计 暂时不知道那些必须重写的
class MCRouter extends RouterDelegate<List<RouteSettings>> with ChangeNotifier, PopNavigatorRouterDelegateMixin<List<RouteSettings>> {
@override
Widget build(BuildContext context) {
// TODO: implement build
throw UnimplementedError();
}
@override
// TODO: implement navigatorKey
GlobalKey<NavigatorState>? get navigatorKey => throw UnimplementedError();
@override
Future<void> setNewRoutePath(List<RouteSettings> configuration) {
// TODO: implement setNewRoutePath
throw UnimplementedError();
}
}
出了小bug就是
@override
void addListener(VoidCallback listener) {
// TODO: implement addListener
}
@override
void removeListener(VoidCallback listener) {
// TODO: implement removeListener
}
addListener、removeListener 没做任何操作导致 push不成功 删掉方法即可 因为后面需要用到 notifyListeners();
完善 build
final List<Page> _pages = [];
@override
Widget build(BuildContext context) {
// TODO: implement build
return Navigator(key: navigatorKey, pages: _pages,);
}
添加push方法
iOS 是获取导航栏然后push Flutter呢? 给_pages 添加元素 就是压入 删除就是弹出
主控制器替换成路由
home: Router(routerDelegate: router, backButtonDispatcher: RootBackButtonDispatcher(),),
onPopPage 必须有
必须提供onPopPage才能使用导航器