Flutter-视频Demo-导航Navigator

122 阅读1分钟

采用 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才能使用导航器

image.png

image.png

添加pop