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,这不能改变。

  • 相关阅读:
    关于php中,记录日志中,将数组转为json信息记录日志时遇到的问题总结
    快速搭建vsftp 服务器并配置指定目录
    Chrome 里的请求报错 "CAUTION: Provisional headers are shown" 是什么意思?
    使用sed,grep 批量修改文件内容
    Linux如何让进程在后台运行的三种方法详解
    redis 安装方式
    beanstalk 安装
    mysql 错误信息
    PostgreSQL LIMIT 子句
    pg_dump和pg-server版本不一致问题的解决办法
  • 原文地址:https://www.cnblogs.com/wjw334/p/12693072.html
Copyright © 2011-2022 走看看