zoukankan      html  css  js  c++  java
  • Listener(每日Flutter 小部件)

    参考:https://www.lizenghai.com/archives/48633.html

    const Listener({
        Key key,
        this.onPointerDown,
        this.onPointerMove,
        this.onPointerEnter,
        this.onPointerExit,
        this.onPointerHover,
        this.onPointerUp,
        this.onPointerCancel,
        this.onPointerSignal,
        this.behavior = HitTestBehavior.deferToChild,
        Widget child,
     })
    

      

    class _ListenerWidgetState extends State<ListenerWidget> {
      Offset offset = Offset(0.0, 0.0);
      String status = 'noPoint';
    
      @override
      Widget build(BuildContext context) {
        return Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Listener(
                behavior: HitTestBehavior.opaque,
                  child: ConstrainedBox(
                      constraints: BoxConstraints.tight(Size(200, 200)),
                      child: Center(
                        child: Text('click me'),
                      )),
                  onPointerDown: (event) => print("onPointerDown}")),
              Text(
                'Test',
                style: TextStyle(fontSize: 22.0),
              ),
            ],
          ),
        );
      }
    }
    

      

    behavior属性

    behavior表示命中测试(Hit Test)过程中的表现策略。它是一个枚举,提供了三个值,分别是HitTestBehavior.deferToChildHitTestBehavior.opaqueHitTestBehavior.translucent

    上面说到过,命中测试,就是看RenderBoxhitTest的返回值,如ListenerhitTest方法如下。

    bool hitTest(BoxHitTestResult result, { Offset position }) {
        bool hitTarget = false;
        if (size.contains(position)) {
          hitTarget = hitTestChildren(result, position: position) || hitTestSelf(position);
          if (hitTarget || behavior == HitTestBehavior.translucent)
            result.add(BoxHitTestEntry(this, position));
        }
        return hitTarget;
    }
    bool hitTestSelf(Offset position) => behavior == HitTestBehavior.opaque;
    

      

    HitTestBehavior.deferToChild:Listener是否命中测试,取决于子child是否命中测试,这是默认behavior的默认值。

    HitTestBehavior.opaque:当Listener的子child没有命中测试时,该属性值保证hitTestSelf返回true,即保证Listener所在区域能响应触摸事件。

    HitTestBehavior.translucent:当Listener的子child没有命中测试时,并且hitTestSelf返回false时,该属性值可以保证Listener所在的区域能响应触摸事件(加入到命中测试列表),但是hitTest方法返回值还是false,这不能改变。

  • 相关阅读:
    CentOS 配置RDP
    CentOS配置LDAP服务器
    CentOS安装配置radius服务器
    Centos开启telnet/ssh/ftp/sftp服务
    控制台彩色输出
    使用变参函数实现pwd命令
    函数参数表中的三个点表示什么
    加密解密复制文件
    "LPWSTR" 类型的实参与"const.char *"类型形参不兼容
    有十二个球,大小形状相同。其中一个重量与其他十一个不同,现在要求用一没有砝码的天平称三次找出那个球,并确定特殊球是轻还是重
  • 原文地址:https://www.cnblogs.com/wjw334/p/12693072.html
Copyright © 2011-2022 走看看