Flutterコンポーネント編のAbsorbPointer


Flutterコンポーネント編のAbsorbPointerは、ヒットテスト中にポインタのウィジェットを吸収します.吸収がtrueの場合、このコンポーネントは、自身のヒットテストを終了することによって、サブツリーがポインタイベントを受信することを防止する.ソースコード
  const AbsorbPointer({
     
    Key key,
    this.absorbing = true,
    Widget child,
    this.ignoringSemantics,
  }) : assert(absorbing != null),
       super(key: key, child: child);
  final bool absorbing;
  final bool ignoringSemantics;

  @override
  RenderAbsorbPointer createRenderObject(BuildContext context) {
     
    return RenderAbsorbPointer(
      absorbing: absorbing,
      ignoringSemantics: ignoringSemantics,
    );
  }

  @override
  void updateRenderObject(BuildContext context, RenderAbsorbPointer renderObject) {
     
    renderObject
      ..absorbing = absorbing
      ..ignoringSemantics = ignoringSemantics;
  }

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
     
    super.debugFillProperties(properties);
    properties.add(DiagnosticsProperty<bool>('absorbing', absorbing));
    properties.add(DiagnosticsProperty<bool>('ignoringSemantics', ignoringSemantics, defaultValue: null));
  }
}
  • child//サブアセンブリ
  • absorbing//ヒットテスト中に指を吸収するかどうか
  • ignoringSemantics//意味ツリーをコンパイルするときに、このプレゼンテーションオブジェクトの意味を無視するかどうか.

  • コードの例
    import 'package:flutter/material.dart';
    class AbsorbPointerWidget extends StatefulWidget {
         
      @override
      _AbsorbPointerWidgetState createState() => _AbsorbPointerWidgetState();
    }
    
    class _AbsorbPointerWidgetState extends State<AbsorbPointerWidget> {
         
      @override
      Widget build(BuildContext context) {
         
        return Scaffold(
          appBar: AppBar(
    
            title: Text('AbsorbPointerWidget'),
          ),
          body:Listener(
            onPointerDown:(e){
         
              print(' ');
            },
            child: AbsorbPointer(     
            absorbing: true,  // Whether this widget absorbs pointers during hit testing.  。
            ignoringSemantics :false,//Whether the semantics of this render object is ignored when compiling the semantics tree.  。    
            child: Container(
              width: 350,
              height:350,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                color: Colors.red
              ),
              child: InkWell(
                onTap: (){
         
                  print(' container ');
                },
                child: Container(
                width: 200,
                height: 200,
                alignment: Alignment.center,
                color: Colors.yellow,
                child: InkWell(
                  onTap: (){
         
                    print(' ');
                  },
                  child: Container(
                  width: 100,
                  height: 100,
                  color: Colors.pink,
                ),
                )
              ),
              )
            ),
          ),
          )
        );
      }
    }