一行代码解决Flutter fl_chart库触摸线条提示和页面左右滑动冲突

Flutter fl_chart 是一个强大的图表库,通过简单配置就可以实现绚烂的图表效果。

现在项目中多个Tab页面放置了图表控件,图表支持触摸弹出线条指引提示,在实际项目接入过程中测试发现,长按线条时,左右滑动指引提示,Tab不跟随滑动,但是当触摸时间不长,刚出现线条指引时立刻左右滑动页面,线条指引消失了,页面也变成了Tab左右滑动了,达不到想要的交互需求。

在追踪了fl_chart源码发现,fl_chart里面的手势失败器执行了cancel方法

    _panGestureRecognizer = PanGestureRecognizer();
    _panGestureRecognizer
      ..onDown = (dragDownDetails) {
        _notifyTouchEvent(FlPanDownEvent(dragDownDetails));
      }
      ..onStart = (dragStartDetails) {
        _notifyTouchEvent(FlPanStartEvent(dragStartDetails));
      }
      ..onUpdate = (dragUpdateDetails) {
        _notifyTouchEvent(FlPanUpdateEvent(dragUpdateDetails));
      }
      ..onCancel = () {
        _notifyTouchEvent(const FlPanCancelEvent());
      }
      ..onEnd = (dragEndDetails) {
        _notifyTouchEvent(FlPanEndEvent(dragEndDetails));
      };

执行了上面的onCancel。

无疑间发现下面还有一个长按手势识别器

_longPressGestureRecognizer =
    LongPressGestureRecognizer(duration: _longPressDuration);

现在转变思想,当触摸时间比较短时,让长按识别器捕获手势即可。

我们可以看到该长按识别器,支持duration自定义,我们完全可以控制这个时间让它在很短时间内进入长按识别,进而可以一直捕获到手势,不至于滑动时执行onCancel

直接贴解决方案代码

        lineTouchData: LineTouchData(
                    enabled: lineTouchTooltipData != null,
                    longPressDuration: const Duration(milliseconds: 50),
                    touchTooltipData:
                    lineTouchTooltipData ?? const LineTouchTooltipData()),

直接配置一个longPressDuration: const Duration(milliseconds: 50),在触摸区域50ms时间后,进入长按手势识别器。

进入实际测试,完美解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值