Flutterコンポーネント編のAbsorbPointer
12537 ワード
Flutterコンポーネント編のAbsorbPointerは、ヒットテスト中にポインタのウィジェットを吸収します.吸収がtrueの場合、このコンポーネントは、自身のヒットテストを終了することによって、サブツリーがポインタイベントを受信することを防止する.ソースコード child//サブアセンブリ absorbing//ヒットテスト中に指を吸収するかどうか ignoringSemantics//意味ツリーをコンパイルするときに、このプレゼンテーションオブジェクトの意味を無視するかどうか.
コードの例
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));
}
}
コードの例
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,
),
)
),
)
),
),
)
);
}
}