有一次用GestureDetector写按钮的时候,发现点击空白处区域没有响应,只有点击到text位置的时候才可以,猜测是响应没有拦截到
Widget _button(context) {
double screenWidth = MediaQuery.of(context).size.width;
return GestureDetector(
behavior: HitTestBehavior.opaque, //加这行代码
child: Container(
width: screenWidth,
child: Center(
child: Text('',
style: TextStyle(color: Colors.black, fontSize: 14)),
)),
onTap: () {
});
}
搜索了下
HitTestBehavior.opaque 和HitTestBehavior.translucent相同点在于都可以扩大点击范围,让自身整个区域都响应点击事件
HitTestBehavior.opaque 和HitTestBehavior.translucent不同点在于opaque会阻挡下一层元素获得事件,而translucent不会
因为opaque会修改hitTestSelf的返回值,让自己通过测试进而让父类结束对其它子类的碰撞测试
HitTestBehavior.translucent的穿透是有条件的,只能在"空白区域"穿透。这里的空白区域是指点击的区域没有child可以通过碰撞测试