【问题标题】:Flutter swipe back gesture using nested navigators使用嵌套导航器颤动向后滑动手势
【发布时间】:2020-11-12 00:22:57
【问题描述】:

我有一个推送其他子导航器的主导航器,但是如果我从子导航器推送一条路线,在 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 相同,但处理其他路由。

【问题讨论】:

  • 你找到解决办法了吗?
  • 还没有,可能我会在一个导航器下移动路线
  • 关于颤振/颤振有一个(长)讨论:github.com/flutter/flutter/issues/14203。看来他们也没有找到解决办法。

标签: ios flutter swipe navigator


【解决方案1】:

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

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

有效!

【讨论】:

  • 这对我来说只是部分工作。它会阻止向后滑动手势返回根屏幕,但现在一旦我从初始嵌套屏幕(子屏幕)向后滑动,我就无法返回根屏幕。
  • 是的,这是真的,我害怕?
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多