paint method
Called whenever the object needs to paint. The given Canvas has its
coordinate space configured such that the origin is at the top left of the
box. The area of the box is the size of the size
argument.
Paint operations should remain inside the given area. Graphical operations outside the bounds may be silently ignored, clipped, or not clipped. It may sometimes be difficult to guarantee that a certain operation is inside the bounds (e.g., drawing a rectangle whose size is determined by user inputs). In that case, consider calling Canvas.clipRect at the beginning of paint so everything that follows will be guaranteed to only draw within the clipped area.
Implementations should be wary of correctly pairing any calls to Canvas.save/Canvas.saveLayer and Canvas.restore, otherwise all subsequent painting on this canvas may be affected, with potentially hilarious but confusing results.
To paint text on a Canvas, use a TextPainter.
To paint an image on a Canvas:
-
Obtain an ImageStream, for example by calling ImageProvider.resolve on an AssetImage or NetworkImage object.
-
Whenever the ImageStream's underlying ImageInfo object changes (see ImageStream.addListener), create a new instance of your custom paint delegate, giving it the new ImageInfo object.
-
In your delegate's paint method, call the Canvas.drawImage, Canvas.drawImageRect, or Canvas.drawImageNine methods to paint the ImageInfo.image object, applying the ImageInfo.scale value to obtain the correct rendering size.
Implementation
@override
void paint(Canvas canvas, Size size) {
final scaleX = size.width / 22.17194441901624;
final scaleY = size.height / 22.172944419016236;
final scale = math.min(scaleX, scaleY);
final translationX = (size.width - 22.17194441901624 * scale) / 2 - 0.9140277904918974 * scale;
final translationY = (size.height - 22.172944419016236 * scale) / 2 - 0.9160277904918979 * scale;
final path = Path();
final paint = Paint()..color = color;
path.moveTo(
10.17 * scale + translationX,
5.236 * scale + translationY,
);
path.cubicTo(
10.443484231367927 * scale + translationX,
5.167807900255858 * scale + translationY,
10.720588848333769 * scale + translationX,
5.115057864737059 * scale + translationY,
10.99999990704248 * scale + translationX,
5.077999957087426 * scale + translationY,
);
path.lineTo(
11.0 * scale + translationX,
6.347999999999999 * scale + translationY,
);
path.cubicTo(
11.0 * scale + translationX,
6.900284749830792 * scale + translationY,
11.447715250169207 * scale + translationX,
7.347999999999999 * scale + translationY,
12.0 * scale + translationX,
7.347999999999999 * scale + translationY,
);
path.cubicTo(
12.552284749830793 * scale + translationX,
7.347999999999999 * scale + translationY,
13.0 * scale + translationX,
6.900284749830792 * scale + translationY,
13.0 * scale + translationX,
6.347999999999999 * scale + translationY,
);
path.lineTo(
13.0 * scale + translationX,
5.071 * scale + translationY,
);
path.cubicTo(
14.49708314252504 * scale + translationX,
5.283465994357347 * scale + translationY,
15.883945579788241 * scale + translationX,
5.9786527350614325 * scale + translationY,
16.949999825786445 * scale + translationX,
7.050999927529218 * scale + translationY,
);
path.lineTo(
16.95 * scale + translationX,
7.0520000000000005 * scale + translationY,
);
path.lineTo(
16.951 * scale + translationX,
7.053000000000001 * scale + translationY,
);
path.cubicTo(
18.017047835182492 * scale + translationX,
8.121939005728269 * scale + translationY,
18.70820323375974 * scale + translationX,
9.507407365617384 * scale + translationY,
18.920999790256015 * scale + translationX,
11.001999878040099 * scale + translationY,
);
path.lineTo(
18.0 * scale + translationX,
11.002 * scale + translationY,
);
path.cubicTo(
17.447715250169207 * scale + translationX,
11.002 * scale + translationY,
17.0 * scale + translationX,
11.449715250169207 * scale + translationY,
17.0 * scale + translationX,
12.002 * scale + translationY,
);
path.cubicTo(
17.0 * scale + translationX,
12.554284749830794 * scale + translationY,
17.447715250169207 * scale + translationX,
13.002 * scale + translationY,
18.0 * scale + translationX,
13.002 * scale + translationY,
);
path.lineTo(
18.922 * scale + translationX,
13.002 * scale + translationY,
);
path.cubicTo(
18.883896641688203 * scale + translationX,
13.280396824316062 * scale + translationY,
18.830482355130467 * scale + translationX,
13.55648191796136 * scale + translationY,
18.762001254344206 * scale + translationX,
13.829000924545678 * scale + translationY,
);
path.cubicTo(
18.624705586690716 * scale + translationX,
14.363264675669752 * scale + translationY,
18.945968598539856 * scale + translationX,
14.907801006338834 * scale + translationY,
19.48 * scale + translationX,
15.046 * scale + translationY,
);
path.cubicTo(
19.561615567365244 * scale + translationX,
15.06735046498166 * scale + translationY,
19.645639382518887 * scale + translationX,
15.07810551332133 * scale + translationY,
19.730000602497018 * scale + translationX,
15.078000460438421 * scale + translationY,
);
path.cubicTo(
20.185906750899264 * scale + translationX,
15.077887917895701 * scale + translationY,
20.584023322608214 * scale + translationX,
14.769429830311287 * scale + translationY,
20.697999999999997 * scale + translationX,
14.328000000000001 * scale + translationY,
);
path.cubicTo(
20.807632363013454 * scale + translationX,
13.892074196577953 * scale + translationY,
20.886493298049817 * scale + translationX,
13.44898267175497 * scale + translationY,
20.933999802978004 * scale + translationX,
13.001999877630649 * scale + translationY,
);
path.lineTo(
22.0 * scale + translationX,
13.002 * scale + translationY,
);
path.cubicTo(
22.552284749830793 * scale + translationX,
13.002 * scale + translationY,
23.0 * scale + translationX,
12.554284749830794 * scale + translationY,
23.0 * scale + translationX,
12.002 * scale + translationY,
);
path.cubicTo(
23.0 * scale + translationX,
11.449715250169207 * scale + translationY,
22.552284749830793 * scale + translationX,
11.002 * scale + translationY,
22.0 * scale + translationX,
11.002 * scale + translationY,
);
path.lineTo(
20.94 * scale + translationX,
11.002 * scale + translationY,
);
path.cubicTo(
20.754324782392228 * scale + translationX,
9.313491067644835 * scale + translationY,
20.091064566598472 * scale + translationX,
7.712924835598617 * scale + translationY,
19.02799895697402 * scale + translationX,
6.387999649839711 * scale + translationY,
);
path.lineTo(
19.778000000000002 * scale + translationX,
5.638000000000001 * scale + translationY,
);
path.cubicTo(
20.15697220950813 * scale + translationX,
5.245621113035695 * scale + translationY,
20.15155237389714 * scale + translationX,
4.621915222978868 * scale + translationY,
19.765818575459136 * scale + translationX,
4.236181424540865 * scale + translationY,
);
path.cubicTo(
19.380084777021136 * scale + translationX,
3.8504476261028624 * scale + translationY,
18.756378886964306 * scale + translationX,
3.845027790491873 * scale + translationY,
18.364 * scale + translationX,
4.224 * scale + translationY,
);
path.lineTo(
17.611 * scale + translationX,
4.977 * scale + translationY,
);
path.cubicTo(
16.287312522386323 * scale + translationX,
3.9141171322457655 * scale + translationY,
14.68755746753865 * scale + translationX,
3.2514556369607854 * scale + translationY,
13.000000707076282 * scale + translationX,
3.067000166815612 * scale + translationY,
);
path.lineTo(
13.0 * scale + translationX,
1.999 * scale + translationY,
);
path.cubicTo(
13.0 * scale + translationX,
1.4467152501692069 * scale + translationY,
12.552284749830793 * scale + translationX,
0.9990000000000001 * scale + translationY,
12.0 * scale + translationX,
0.9990000000000001 * scale + translationY,
);
path.cubicTo(
11.447715250169207 * scale + translationX,
0.9990000000000001 * scale + translationY,
11.0 * scale + translationX,
1.4467152501692064 * scale + translationY,
11.0 * scale + translationX,
1.9989999999999999 * scale + translationY,
);
path.lineTo(
11.0 * scale + translationX,
3.0650000000000004 * scale + translationY,
);
path.cubicTo(
10.551615144912965 * scale + translationX,
3.1119180659712926 * scale + translationY,
10.107152200968313 * scale + translationX,
3.1907851748216225 * scale + translationY,
9.669999481014742 * scale + translationX,
3.300999822836573 * scale + translationY,
);
path.cubicTo(
9.146584782314358 * scale + translationX,
3.448432772824839 * scale + translationY,
8.836915720758803 * scale + translationX,
3.9870966332060918 * scale + translationY,
8.972893828554815 * scale + translationX,
4.5136038665922475 * scale + translationY,
);
path.cubicTo(
9.108871936350825 * scale + translationX,
5.040111099978404 * scale + translationY,
9.640651398186996 * scale + translationX,
5.361458709483696 * scale + translationY,
10.17 * scale + translationX,
5.237 * scale + translationY,
);
path.close();
path.moveTo(
14.0 * scale + translationX,
9.002 * scale + translationY,
);
path.cubicTo(
14.0 * scale + translationX,
9.554284749830794 * scale + translationY,
14.447715250169207 * scale + translationX,
10.002 * scale + translationY,
15.0 * scale + translationX,
10.002 * scale + translationY,
);
path.cubicTo(
15.552284749830793 * scale + translationX,
10.002 * scale + translationY,
16.0 * scale + translationX,
9.554284749830794 * scale + translationY,
16.0 * scale + translationX,
9.002 * scale + translationY,
);
path.cubicTo(
16.0 * scale + translationX,
8.449715250169207 * scale + translationY,
15.552284749830793 * scale + translationX,
8.002 * scale + translationY,
15.0 * scale + translationX,
8.002 * scale + translationY,
);
path.cubicTo(
14.447715250169207 * scale + translationX,
8.002 * scale + translationY,
14.0 * scale + translationX,
8.449715250169207 * scale + translationY,
14.0 * scale + translationX,
9.002 * scale + translationY,
);
path.close();
path.moveTo(
18.377 * scale + translationX,
16.965 * scale + translationY,
);
path.lineTo(
18.369999999999997 * scale + translationX,
16.954 * scale + translationY,
);
path.lineTo(
18.357999999999997 * scale + translationX,
16.946 * scale + translationY,
);
path.lineTo(
2.707 * scale + translationX,
1.295 * scale + translationY,
);
path.cubicTo(
2.31462111303569 * scale + translationX,
0.9160277904918979 * scale + translationY,
1.6909152229788837 * scale + translationX,
0.9214476261028994 * scale + translationY,
1.3051814245408915 * scale + translationX,
1.3071814245408917 * scale + translationY,
);
path.cubicTo(
0.9194476261028992 * scale + translationX,
1.6929152229788837 * scale + translationY,
0.9140277904918974 * scale + translationX,
2.3166211130356897 * scale + translationY,
1.2929999999999993 * scale + translationX,
2.7089999999999996 * scale + translationY,
);
path.lineTo(
4.9719999999999995 * scale + translationX,
6.388 * scale + translationY,
);
path.cubicTo(
3.908526678540672 * scale + translationX,
7.712782129637706 * scale + translationY,
3.244909341601204 * scale + translationX,
9.313373030128403 * scale + translationY,
3.0589999905991125 * scale + translationX,
11.001999966188768 * scale + translationY,
);
path.lineTo(
2.0 * scale + translationX,
11.001999999999999 * scale + translationY,
);
path.cubicTo(
1.4477152501692068 * scale + translationX,
11.001999999999999 * scale + translationY,
1.0 * scale + translationX,
11.449715250169206 * scale + translationY,
1.0 * scale + translationX,
12.001999999999999 * scale + translationY,
);
path.cubicTo(
1.0 * scale + translationX,
12.554284749830792 * scale + translationY,
1.4477152501692063 * scale + translationX,
13.001999999999999 * scale + translationY,
1.9999999999999998 * scale + translationX,
13.001999999999999 * scale + translationY,
);
path.lineTo(
3.06 * scale + translationX,
13.001999999999999 * scale + translationY,
);
path.cubicTo(
3.246011300252859 * scale + translationX,
14.690545117416784 * scale + translationY,
3.9088400809266552 * scale + translationX,
16.29125407754738 * scale + translationY,
4.970999945236079 * scale + translationX,
17.61699980591913 * scale + translationY,
);
path.lineTo(
4.221 * scale + translationX,
18.366999999999997 * scale + translationY,
);
path.cubicTo(
3.961227128510129 * scale + translationX,
18.6182596042919 * scale + translationY,
3.8572387606398877 * scale + translationX,
18.990133707522418 * scale + translationY,
3.9490022463630585 * scale + translationX,
19.33969456946058 * scale + translationY,
);
path.cubicTo(
4.040765732086229 * scale + translationX,
19.689255431398742 * scale + translationY,
4.314000819371121 * scale + translationX,
19.962104320680403 * scale + translationY,
4.663691124344307 * scale + translationX,
20.053373286483552 * scale + translationY,
);
path.cubicTo(
5.013381429317494 * scale + translationX,
20.1446422522867 * scale + translationY,
5.385108076663793 * scale + translationX,
20.04012799986867 * scale + translationY,
5.635999999999998 * scale + translationX,
19.779999999999998 * scale + translationY,
);
path.lineTo(
6.386 * scale + translationX,
19.029999999999998 * scale + translationY,
);
path.cubicTo(
7.71152358940786 * scale + translationX,
20.0917216052746 * scale + translationY,
9.311880738338216 * scale + translationX,
20.75420148270351 * scale + translationY,
10.999999765771868 * scale + translationX,
20.93999955411481 * scale + translationY,
);
path.lineTo(
11.0 * scale + translationX,
22.003 * scale + translationY,
);
path.cubicTo(
11.0 * scale + translationX,
22.555284749830793 * scale + translationY,
11.447715250169207 * scale + translationX,
23.003 * scale + translationY,
12.0 * scale + translationX,
23.003 * scale + translationY,
);
path.cubicTo(
12.552284749830793 * scale + translationX,
23.003 * scale + translationY,
13.0 * scale + translationX,
22.555284749830793 * scale + translationY,
13.0 * scale + translationX,
22.003 * scale + translationY,
);
path.lineTo(
13.0 * scale + translationX,
20.94 * scale + translationY,
);
path.cubicTo(
14.68801435294513 * scale + translationX,
20.75449107643546 * scale + translationY,
16.288361557029283 * scale + translationX,
20.092362161698436 * scale + translationY,
17.61399962493688 * scale + translationX,
19.03099959476404 * scale + translationY,
);
path.lineTo(
21.293 * scale + translationX,
22.71 * scale + translationY,
);
path.cubicTo(
21.685378886964305 * scale + translationX,
23.088972209508135 * scale + translationY,
22.309084777021134 * scale + translationX,
23.08355237389715 * scale + translationY,
22.69481857545914 * scale + translationX,
22.69781857545914 * scale + translationY,
);
path.cubicTo(
23.08055237389715 * scale + translationX,
22.312084777021138 * scale + translationY,
23.085972209508135 * scale + translationX,
21.688378886964305 * scale + translationY,
22.707 * scale + translationX,
21.296 * scale + translationY,
);
path.close();
path.moveTo(
13.0 * scale + translationX,
18.92 * scale + translationY,
);
path.lineTo(
13.0 * scale + translationX,
17.003 * scale + translationY,
);
path.cubicTo(
13.0 * scale + translationX,
16.450715250169207 * scale + translationY,
12.552284749830793 * scale + translationX,
16.003 * scale + translationY,
12.0 * scale + translationX,
16.003 * scale + translationY,
);
path.cubicTo(
11.447715250169207 * scale + translationX,
16.003 * scale + translationY,
11.0 * scale + translationX,
16.450715250169207 * scale + translationY,
11.0 * scale + translationX,
17.003 * scale + translationY,
);
path.lineTo(
11.0 * scale + translationX,
18.92 * scale + translationY,
);
path.cubicTo(
9.50803871782892 * scale + translationX,
18.7092029215006 * scale + translationY,
8.12421777520177 * scale + translationX,
18.02167718067697 * scale + translationY,
7.055000092966046 * scale + translationX,
16.960000223487476 * scale + translationY,
);
path.lineTo(
7.05 * scale + translationX,
16.953 * scale + translationY,
);
path.lineTo(
7.043 * scale + translationX,
16.948 * scale + translationY,
);
path.cubicTo(
5.980695827517702 * scale + translationX,
15.878857166274681 * scale + translationY,
5.292178429976864 * scale + translationX,
14.49515816816026 * scale + translationY,
5.079999952111177 * scale + translationX,
13.00299987742158 * scale + translationY,
);
path.lineTo(
6.0 * scale + translationX,
13.003 * scale + translationY,
);
path.cubicTo(
6.552284749830793 * scale + translationX,
13.003 * scale + translationY,
7.0 * scale + translationX,
12.555284749830793 * scale + translationY,
7.0 * scale + translationX,
12.003 * scale + translationY,
);
path.cubicTo(
7.0 * scale + translationX,
11.450715250169207 * scale + translationY,
6.552284749830793 * scale + translationX,
11.003 * scale + translationY,
6.0 * scale + translationX,
11.003 * scale + translationY,
);
path.lineTo(
5.079 * scale + translationX,
11.003 * scale + translationY,
);
path.cubicTo(
5.243887731150573 * scale + translationX,
9.84653751080843 * scale + translationY,
5.697900176879277 * scale + translationX,
8.750372613431622 * scale + translationY,
6.398999932527582 * scale + translationX,
7.815999917586435 * scale + translationY,
);
path.lineTo(
8.253 * scale + translationX,
9.67 * scale + translationY,
);
path.cubicTo(
7.856651639104417 * scale + translationX,
10.264912203437927 * scale + translationY,
7.935190403389072 * scale + translationX,
11.05685776551688 * scale + translationY,
8.440666617004023 * scale + translationX,
11.562333979131832 * scale + translationY,
);
path.cubicTo(
8.946142830618975 * scale + translationX,
12.067810192746784 * scale + translationY,
9.738088392697929 * scale + translationX,
12.146348957031439 * scale + translationY,
10.333000307947398 * scale + translationX,
11.750000350177288 * scale + translationY,
);
path.lineTo(
16.186 * scale + translationX,
17.603 * scale + translationY,
);
path.cubicTo(
15.251212344126555 * scale + translationX,
18.301989036202592 * scale + translationY,
14.155581211102627 * scale + translationX,
18.754547281983974 * scale + translationY,
12.99999955789309 * scale + translationX,
18.918999356598416 * scale + translationY,
);
path.close();
path.moveTo(
9.0 * scale + translationX,
14.003000000000002 * scale + translationY,
);
path.cubicTo(
8.447715250169207 * scale + translationX,
14.003000000000002 * scale + translationY,
8.0 * scale + translationX,
14.450715250169209 * scale + translationY,
8.0 * scale + translationX,
15.003000000000002 * scale + translationY,
);
path.cubicTo(
8.0 * scale + translationX,
15.555284749830795 * scale + translationY,
8.447715250169207 * scale + translationX,
16.003 * scale + translationY,
9.0 * scale + translationX,
16.003 * scale + translationY,
);
path.cubicTo(
9.552284749830793 * scale + translationX,
16.003 * scale + translationY,
10.0 * scale + translationX,
15.555284749830795 * scale + translationY,
10.0 * scale + translationX,
15.003000000000002 * scale + translationY,
);
path.cubicTo(
10.0 * scale + translationX,
14.450715250169209 * scale + translationY,
9.552284749830793 * scale + translationX,
14.003000000000002 * scale + translationY,
9.0 * scale + translationX,
14.003000000000002 * scale + translationY,
);
path.close();
canvas.drawPath(path, paint);
}