Flutter中有没有办法区分鼠标左右平移?

问题描述 投票:0回答:1

有没有办法可以区分颤振中的左键平移和右键平移?

我正在使用带有 onPanUpdate 回调的 GestureDetector。但是,该功能的详细信息 (

PanDown/Update/EndDetails
) 没有有关正在按下的按钮(因此用于平移)的详细信息。 我发现的一种可能的解决方法是使用监听器缓存该点:

return Listener(
      onPointerDown: (event) => _cachedPointerDownEvent = event,
      child: GestureDetector(
        onPanDown: (details) {},
        onPanStart: (details) {},
        onPanUpdate: (details) {
          switch(_cachedPointerDownEvent!.buttons){
            ...
          }
        },
        onPanEnd: (details) {},
        child: Container(
            color: Colors.red,
            ),
      ),
    );

然而,这不太优雅,并且不能与其他输入方法(触控板等)很好地集成。

我还尝试了带有 onPointerMove 回调的监听器,但即使另一个监听器在视觉上位于它前面,监听器也总是会触发(Flutter - 如何忽略子触摸事件上的父触摸事件?)。

有没有办法获得有关用于拖动的指针的详细信息或为不同的鼠标按钮提供不同的事件?

flutter gesture
1个回答
0
投票

您可以通过使用

RawGestureRecognizer
并根据您的用例需要进行配置来实现该功能:

return RawGestureDetector(
  gestures: {
    /// The type of gesture recognizer to add.
    PanGestureRecognizer:
        GestureRecognizerFactoryWithHandlers<PanGestureRecognizer>(
      () => PanGestureRecognizer(
        /// Change this condition to match the buttons you want to allow.
        allowedButtonsFilter: (buttons) => buttons == kSecondaryButton,
      ),
      (instance) {
        /// Add your event handlers here.
        instance
          ..onDown = (details) {
            log("onDown: $details");
          }
          ..onUpdate = (details) {
            log("onUpdate: $details");
          };
      },
    ),
  },
  child: YourWidget(),
);
© www.soinside.com 2019 - 2024. All rights reserved.