如何剪辑容器的可点击区域?
How do I clip clickable area of my container?
整个容器都被点击了,圆圈除外 shouldn't be clicked
。
我正在把我的容器做成圆形。
我想做什么
这是我的代码
InkWell(
onTap: () {},
hoverColor: Colors.yellow,
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
)
你可以把你的容器child用一叠包起来然后给2children:一个方形容器和一个圆形容器,颜色相同,然后把圆形容器用手势检测器或墨水瓶。
如果仅通过文本难以理解,请告诉我,我会为您编写代码片段。
有帮助就点个赞吧
使用这个
Container(
width: 300,
height: 300,
color: Colors.yellow,
child: GestureDetector(
onTap: () {},
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
),
),
您可以像这样填充 InkWell 的 borderRadius
属性:
InkWell(
borderRadius: BorderRadius.circular('Your customized double value'),
onTap: () {},
hoverColor: Colors.yellow,
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
)
您需要使用 customBorder
by providing CircleBorder()
.
InkWell(
customBorder: const CircleBorder(),
但是对于这种情况,您需要用 Material
小部件包装 CircleBorder()
。
运行 在 dartPad
完整的小部件会像
Material(
shape: const CircleBorder(),
color: Colors.red, // container color,to have splash color effect
child: InkWell(
customBorder: const CircleBorder(),
splashColor: Colors.white,
onTap: () {
debugPrint("tapped");
},
hoverColor: Colors.yellow,
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent, // material color will cover this
),
),
),
),
引用
这将解决您的问题;
InkWell(
customBorder: const CircleBorder(),
但如果您还想 material 对红色容器产生涟漪效应,您可以使用此代码;
ClipOval(
child: Container(
width: 300,
height: 300,
color: Colors.red,
child: TextButton(
onPressed: () {},
child: Center(),
),
),
),
整个容器都被点击了,圆圈除外 shouldn't be clicked
。
我正在把我的容器做成圆形。
我想做什么
这是我的代码
InkWell(
onTap: () {},
hoverColor: Colors.yellow,
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
)
你可以把你的容器child用一叠包起来然后给2children:一个方形容器和一个圆形容器,颜色相同,然后把圆形容器用手势检测器或墨水瓶。 如果仅通过文本难以理解,请告诉我,我会为您编写代码片段。 有帮助就点个赞吧
使用这个
Container(
width: 300,
height: 300,
color: Colors.yellow,
child: GestureDetector(
onTap: () {},
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
),
),
您可以像这样填充 InkWell 的 borderRadius
属性:
InkWell(
borderRadius: BorderRadius.circular('Your customized double value'),
onTap: () {},
hoverColor: Colors.yellow,
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.red,
),
),
)
您需要使用 customBorder
by providing CircleBorder()
.
InkWell(
customBorder: const CircleBorder(),
但是对于这种情况,您需要用 Material
小部件包装 CircleBorder()
。
运行 在 dartPad
完整的小部件会像
Material(
shape: const CircleBorder(),
color: Colors.red, // container color,to have splash color effect
child: InkWell(
customBorder: const CircleBorder(),
splashColor: Colors.white,
onTap: () {
debugPrint("tapped");
},
hoverColor: Colors.yellow,
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent, // material color will cover this
),
),
),
),
引用
这将解决您的问题;
InkWell(
customBorder: const CircleBorder(),
但如果您还想 material 对红色容器产生涟漪效应,您可以使用此代码;
ClipOval(
child: Container(
width: 300,
height: 300,
color: Colors.red,
child: TextButton(
onPressed: () {},
child: Center(),
),
),
),