【问题标题】:Flutter PointerEvent vs OnTap, one works, the other doesn'tFlutter PointerEvent vs OnTap,一个有效,另一个无效
【发布时间】:2020-07-28 14:49:11
【问题描述】:

我有一个我正在尝试创建的堆栈小部件: 1.用户触摸小部件按钮触发pointerDown事件。 2. 指针向下导致滑块类型小部件从按钮后面从 0 缩放到 100% 3. 手指仍然向下,用户拖动以选择刻度上的一个值 4. 通过将手指从屏幕上松开来选择值,即pointerUp。

当我在步骤 1 中使用 onTap 而不是 pointerDown 时,小部件工作正常。但是当我尝试使用指针向下事件时,_open 方法(管理滑块的 scaleUp)不会被触发。

我几乎完全按照这个例子:https://fireship.io/lessons/flutter-radial-menu-staggered-animations/,但尝试像这样更改浮动操作按钮上的触摸事件:

  Transform.scale(
              scale: widget.scale.value,
              child: Listener(
                  onPointerDown: (PointerDownEvent event) {
                    print('pointer is down');
                    setState(() {
                      _open;
                    });
                  },
                  child: FloatingActionButton(child: Icon(Icons.blur_circular), onPressed: () {})),
            )

打印部分检测并触发事件,但 _open 方法不执行任何操作,并且菜单部分不像教程链接中那样出现。

我很茫然。

【问题讨论】:

    标签: flutter animation events


    【解决方案1】:

    由于FloatingActionButton 下方的按钮也有一个监听器,所以Listener 小部件不会得到PointerDown 事件。因此,您必须将行为更改为 opaque,以便两者都能获取事件。

    试试这样的:

    Listener(
      behavior: HitTestBehavior.opaque,
      onPointerDown: (PointerDownEvent details){
    
      },
      child: ...,
    )
    

    【讨论】:

    • 不幸的是,这并没有改变结果。打印语句仍在触发,就像以前一样,动画没有触发。 ://
    • 我猜 _open 是一个函数。尝试调用 _open()
    • 该死的,就是这样。对于 onTap,我调用了 _open,但对于 onPointerDown,我必须调用 _open()...
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 2019-11-22
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多