【发布时间】:2021-02-04 12:08:47
【问题描述】:
我知道我可以给我的容器装饰,然后为它提供一个边框。
但是我正在尝试使用自定义绘制class 用一些自定义边框包裹我的Container,自定义绘制类应该围绕或提供border 到container,如dashed border 或任何自定义形状边框,
注意:- 请不要建议我使用任何自定义包,如虚线边框,我希望以自定义 Painter 形式的答案,如 BoxPainter 类等。
所以,到目前为止,我已经写了这个code
import 'dart:math';
import 'package:flutter/material.dart';
class CustPaint extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: 300,
height: 300,
decoration: CustomDecoration(),
child: new Icon(Icons.wb_sunny),
)),
);
}
}
class CustomDecoration extends Decoration {
@override
BoxPainter createBoxPainter([void Function() onChanged]) {
return BoxDecorationPainter();
}
}
class BoxDecorationPainter extends BoxPainter {
@override
void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) {
final Rect bounds = offset & configuration.size;
_drawDecoration(canvas, bounds);
}
}
void _drawDecoration(Canvas canvas, Rect size) {
var radius = min(size.width / 2, size.height / 2);
var circleRaidus = radius * .012;
var paint = Paint()
..color = Colors.teal
..strokeWidth = circleRaidus * .5
..style = PaintingStyle.stroke
..strokeCap = StrokeCap.round;
for (int i = 0; i < 60; i++) {
Offset topRight = Offset(size.left + i * 4, size.top);
Offset downLeft = Offset(size.left, size.top + i * 4);
Offset bottomRight = Offset(size.left + i * 4, size.bottom);
Offset downRight = Offset(size.right, size.top + i * 4);
canvas.drawCircle(topRight, circleRaidus * 2, paint);
canvas.drawCircle(bottomRight, circleRaidus * 2, paint);
canvas.drawCircle(downRight, circleRaidus * 2, paint);
canvas.drawCircle(downLeft, circleRaidus * 2, paint);
}
}
而我所取得的成就是
但是输出
- 我想要的是所有
lines(带有小圆圈)都应该加入,并且在他们之间不应该有gap,同时会见corner到corner。 (意味着它们应该像正方形或矩形一样连接起来以覆盖容器) - 另外,我想在那些微小的
circles之间给出一些space之类的 一些padding。 - 如果
circles可以 替换为任何image。
提前致谢
【问题讨论】:
-
您不能同时使用固定的
60和i * 4- 您希望始终在每一侧都有60圆圈,或者必须每隔4个逻辑像素放置一个圆圈? -
说我想在边上有 n 个圆圈,那么我将如何在代码中实现它,它们将通过连接边形成正方形或矩形,并在这些小圆圈之间添加一些填充。跨度>
-
@pskink 实际上我尝试了你的解决方案,但我认为我以错误的方式实现了它,因为这些线不符合形成正方形或矩形,而且这些小圆圈之间也没有看到填充,也许你可以写一个答案来更清楚。
-
@pskink 您的代码运行良好,谢谢,但是您能解释一下代码吗,因为其中有很多数学,而我的数学很烂。
-
我的意思是关于 computeMetrics 和 getTangentForOffset 和 rect.deflate
标签: flutter