使用嵌套导航器颤动向后滑动手势

时间:2020-07-22 12:46:23

标签: ios flutter swipe navigator

我有一个主导航器,可以推其他子导航器,但是如果我从子导航器推入一条路线,则在iOS上,当我从打开的小部件向后滑动时,它将返回主导航器的根目录,而不是返回到子小部件,那么我如何才能先使用滑动手势处理子导航器的历史记录,并且仅当我位于子项的根目录(如单个导航器)时才允许返回主导航器?

这是主导航器:

class MenuNavigator extends StatelessWidget {
  final GlobalKey<NavigatorState> navigatorKey;

  const MenuNavigator({Key key, this.navigatorKey}) : super(key: key);

  WidgetBuilder routeBuilder(
      RouteSettings routeSettings, GetUserResponse userResponse) {
    switch (routeSettings.name) {
      case MenuNavigatorRoutes.root:
        return (context) => MenuPage();
      case MenuNavigatorRoutes.documents:
        return (context) => DocumentsNavigator();
      case MenuNavigatorRoutes.requests:
        return (context) => RequestsNavigator();
      default:
        return null;
    }
  }

  @override
  Widget build(BuildContext context) {
     return Navigator(
          key: navigatorKey,
          initialRoute: MenuNavigatorRoutes.root,
          onGenerateRoute: (routeSettings) {
            return MaterialPageRoute(
                settings: routeSettings,
                builder: (context) =>
                    routeBuilder(routeSettings, userResponse)(context));
          },
        );
  }
}

DocumentsNavigator和RequestsNavigator是子导航器,具有与MenuNavigator相同的结构,但可以处理其他路由。

1 个答案:

答案 0 :(得分:0)

我刚刚发现,如果您用以下方法包装嵌套的导航器:

WillPopScope(
        child: NestedNavigator(initialRoute: ...),
        onWillPop: () async =>
            !Navigator.of(context).userGestureInProgress));

有效!