ios - Flutter 使用嵌套导航器向后滑动手势

标签 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 相同的结构,但处理其他路由。

最佳答案

我刚刚发现,如果您将嵌套导航器包装为:

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

关于ios - Flutter 使用嵌套导航器向后滑动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63034543/

相关文章:

flutter - 如何在 Isolate 上实例化本地通知?

android - ViewPager 内的 LinearLayout 禁用滑动

html - DIV 应在溢出 :hidden parent 内并排保持

dart - 构造函数可选参数

ios - Main.storyboard 未找到

ios - youtube 而不是 facebook 上的图片通过 ios SDK 提要

ios - Xcode:不使用 Control+拖动从控件创建 segue 的替代方法?

android - 如何使用 Flutter 应用程序从文件管理器打开(音频)文件

java - Android Jelly Bean 下拉设置/通知折叠功能用于什么?

ios - 将 base64URL 解码为 base64——Swift