四分之一圆形,容器呈颤动状
Quarter circle shape with a container in flutter
我想要一个四分之一圆形的容器,想想整个披萨的四分之一片。
我该如何实现?基本上我想把它放在右下角另一个容器的顶部,圆形部分朝内,角度当然匹配右下角形成底部容器的位置,使用堆栈小部件。
谢谢。
您可以使用 CustomPainter
结合 ClipRect
画一个圆并裁剪它。
enum CircleAlignment {
topLeft,
topRight,
bottomLeft,
bottomRight,
}
class QuarterCircle extends StatelessWidget {
final CircleAlignment circleAlignment;
final Color color;
const QuarterCircle({
this.color = Colors.grey,
this.circleAlignment = CircleAlignment.topLeft,
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox.expand(
child: ClipRect(
child: CustomPaint(
painter: QuarterCirclePainter(
circleAlignment: circleAlignment,
color: color,
),
),
),
);
}
}
class QuarterCirclePainter extends CustomPainter {
final CircleAlignment circleAlignment;
final Color color;
const QuarterCirclePainter({this.circleAlignment, this.color});
@override
void paint(Canvas canvas, Size size) {
final radius = math.min(size.height, size.width);
final offset = circleAlignment == CircleAlignment.topLeft
? Offset(.0, .0)
: circleAlignment == CircleAlignment.topRight
? Offset(size.width, .0)
: circleAlignment == CircleAlignment.bottomLeft
? Offset(.0, size.height)
: Offset(size.width, size.height);
canvas.drawCircle(offset, radius, Paint()..color = color);
}
@override
bool shouldRepaint(QuarterCirclePainter oldDelegate) {
return color == oldDelegate.color &&
circleAlignment == oldDelegate.circleAlignment;
}
}
您可以通过
使用它
QuarterCircle(
circleAlignment: CircleAlignment.bottomLeft,
),
我想要一个四分之一圆形的容器,想想整个披萨的四分之一片。
我该如何实现?基本上我想把它放在右下角另一个容器的顶部,圆形部分朝内,角度当然匹配右下角形成底部容器的位置,使用堆栈小部件。
谢谢。
您可以使用 CustomPainter
结合 ClipRect
画一个圆并裁剪它。
enum CircleAlignment {
topLeft,
topRight,
bottomLeft,
bottomRight,
}
class QuarterCircle extends StatelessWidget {
final CircleAlignment circleAlignment;
final Color color;
const QuarterCircle({
this.color = Colors.grey,
this.circleAlignment = CircleAlignment.topLeft,
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return SizedBox.expand(
child: ClipRect(
child: CustomPaint(
painter: QuarterCirclePainter(
circleAlignment: circleAlignment,
color: color,
),
),
),
);
}
}
class QuarterCirclePainter extends CustomPainter {
final CircleAlignment circleAlignment;
final Color color;
const QuarterCirclePainter({this.circleAlignment, this.color});
@override
void paint(Canvas canvas, Size size) {
final radius = math.min(size.height, size.width);
final offset = circleAlignment == CircleAlignment.topLeft
? Offset(.0, .0)
: circleAlignment == CircleAlignment.topRight
? Offset(size.width, .0)
: circleAlignment == CircleAlignment.bottomLeft
? Offset(.0, size.height)
: Offset(size.width, size.height);
canvas.drawCircle(offset, radius, Paint()..color = color);
}
@override
bool shouldRepaint(QuarterCirclePainter oldDelegate) {
return color == oldDelegate.color &&
circleAlignment == oldDelegate.circleAlignment;
}
}
您可以通过
使用它QuarterCircle(
circleAlignment: CircleAlignment.bottomLeft,
),