我正在推送一条延伸PopupRoute的路径(扩展了ModalRoute)。此路径的内容小部件没有覆盖整个屏幕。但它吸收了所有手势,即使是那些没有被其内容覆盖的手势,因为它的屏障由父ModalRoute调整。是否有简单的方法来传递发生在“空白区域”上的手势从这条路线到它下面(后面)的路线??
PopupRoute
ModalRoute
7jmck4yq1#
正如我在这里的问题中所做的那样,我必须修改flutter的源代码,以便为弹出屏障添加半透明行为。你可以把routes.dart复制到一个新的custom_routes.dart文件中,然后在这个文件中修改ModalRoute类的_buildModalBarrier函数,如下所示(见注解掉的代码):
routes.dart
custom_routes.dart
_buildModalBarrier
Widget _buildModalBarrier(BuildContext context) { ... else { ///////////////////////////////// comment this code // barrier = ModalBarrier( // dismissible: barrierDismissible, // changedInternalState is called if barrierDismissible updates // semanticsLabel: barrierLabel, // changedInternalState is called if barrierLabel updates // barrierSemanticsDismissible: semanticsDismissible, // ); //////////////////////////////// add this code barrier = Listener( behavior: HitTestBehavior.translucent, onPointerUp: (event){ print('event is $event'); Navigator.of(context).pop(); }, ); //////////////////////////////// } ... }
你可以做到这一点,但你需要重新实现所有的逻辑,而ModalRoute会照顾你。所以经过几个小时的挖掘,不幸的是,这是唯一的方法,我发现这样做。如果有人有一个更好的方法,告诉我更新答案。
rt4zxlrg2#
ModalRoute在构造函数下的文档中被描述为“一个阻止与先前路由交互的路由”,如果你不需要ModalRoute提供的所有魔力,你可以扩展TransitionRoute:
TransitionRoute
class TapThroughOverlayRoute<T> extends TransitionRoute<T> { final Duration _transitionDuration; final WidgetBuilder builder; TapThroughOverlayRoute({ required this.builder, Duration transitionDuration = Duration.zero, super.settings, }) : _transitionDuration = transitionDuration; @override Iterable<OverlayEntry> createOverlayEntries() { return [OverlayEntry(builder: builder, maintainState: true)]; } @override bool get opaque => false; @override Duration get transitionDuration => _transitionDuration; }
这将创建一个没有任何图层阻止与先前路线交互的路线。
2条答案
按热度按时间7jmck4yq1#
正如我在这里的问题中所做的那样,我必须修改flutter的源代码,以便为弹出屏障添加半透明行为。
你可以把
routes.dart
复制到一个新的custom_routes.dart
文件中,然后在这个文件中修改ModalRoute
类的_buildModalBarrier
函数,如下所示(见注解掉的代码):但是为什么不创建一个扩展
ModalRoute
的自定义路由呢?你可以做到这一点,但你需要重新实现所有的逻辑,而
ModalRoute
会照顾你。所以经过几个小时的挖掘,不幸的是,这是唯一的方法,我发现这样做。如果有人有一个更好的方法,告诉我更新答案。rt4zxlrg2#
ModalRoute
在构造函数下的文档中被描述为“一个阻止与先前路由交互的路由”,如果你不需要ModalRoute
提供的所有魔力,你可以扩展TransitionRoute
:这将创建一个没有任何图层阻止与先前路线交互的路线。