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 / 20.316042397172453;
final scaleY = size.height / 20.110423868037522;
final scale = math.min(scaleX, scaleY);
final translationX = (size.width - 20.316042397172453 * scale) / 2 - 1.90549966753703 * scale;
final translationY = (size.height - 20.110423868037522 * scale) / 2 - 1.9254996675370304 * scale;
final path = Path();
final paint = Paint()..color = color;
path.moveTo(
4.76 * scale + translationX,
10.59 * scale + translationY,
);
path.cubicTo(
5.312207406469293 * scale + translationX,
10.661650702705314 * scale + translationY,
5.817972676109391 * scale + translationX,
10.272158459894834 * scale + translationY,
5.88975737719243 * scale + translationX,
9.71996845156376 * scale + translationY,
);
path.cubicTo(
5.9615420782754684 * scale + translationX,
9.167778443232688 * scale + translationY,
5.572172569520964 * scale + translationX,
8.661918679230912 * scale + translationY,
5.019999995811431 * scale + translationX,
8.589999992832709 * scale + translationY,
);
path.lineTo(
3.26 * scale + translationX,
8.15 * scale + translationY,
);
path.cubicTo(
2.910605325640145 * scale + translationX,
8.04288907121841 * scale + translationY,
2.530607448867385 * scale + translationX,
8.134899397615909 * scale + translationY,
2.2689106670031816 * scale + translationX,
8.389976217216208 * scale + translationY,
);
path.cubicTo(
2.0072138851389782 * scale + translationX,
8.64505303681651 * scale + translationY,
1.90549966753703 * scale + translationX,
9.022569267531434 * scale + translationY,
2.003625300317589 * scale + translationX,
9.37459305895312 * scale + translationY,
);
path.cubicTo(
2.101750933098148 * scale + translationX,
9.726616850374807 * scale + translationY,
2.3840875631801035 * scale + translationX,
9.997079997272023 * scale + translationY,
2.7399999999999993 * scale + translationX,
10.08 * scale + translationY,
);
path.lineTo(
4.5 * scale + translationX,
10.55 * scale + translationY,
);
path.cubicTo(
4.583777054789904 * scale + translationX,
10.577956922413204 * scale + translationY,
4.671693751523508 * scale + translationX,
10.591482568064528 * scale + translationY,
4.759999984286376 * scale + translationX,
10.589999965040487 * scale + translationY,
);
path.close();
path.moveTo(
8.620000000000001 * scale + translationX,
5.0 * scale + translationY,
);
path.cubicTo(
8.740664137329567 * scale + translationX,
5.449217919767752 * scale + translationY,
9.155131185717133 * scale + translationX,
5.75592353557455 * scale + translationY,
9.620000000000001 * scale + translationX,
5.74 * scale + translationY,
);
path.cubicTo(
9.706115293703549 * scale + translationX,
5.753827360773375 * scale + translationY,
9.793885001121375 * scale + translationX,
5.753827360773375 * scale + translationY,
9.880000149377961 * scale + translationX,
5.740000086784361 * scale + translationY,
);
path.cubicTo(
10.408231858926014 * scale + translationX,
5.593870949685311 * scale + translationY,
10.720415623743552 * scale + translationX,
5.04977924528903 * scale + translationY,
10.58 * scale + translationX,
4.5200000000000005 * scale + translationY,
);
path.lineTo(
10.11 * scale + translationX,
2.7600000000000002 * scale + translationY,
);
path.cubicTo(
10.027079997272022 * scale + translationX,
2.404087563180104 * scale + translationY,
9.756616850374806 * scale + translationX,
2.1217509330981486 * scale + translationY,
9.40459305895312 * scale + translationX,
2.0236253003175895 * scale + translationY,
);
path.cubicTo(
9.052569267531432 * scale + translationX,
1.9254996675370304 * scale + translationY,
8.675053036816507 * scale + translationX,
2.027213885138979 * scale + translationY,
8.419976217216208 * scale + translationX,
2.288910667003182 * scale + translationY,
);
path.cubicTo(
8.164899397615908 * scale + translationX,
2.550607448867385 * scale + translationY,
8.072889071218407 * scale + translationX,
2.930605325640145 * scale + translationY,
8.18 * scale + translationX,
3.28 * scale + translationY,
);
path.close();
path.moveTo(
13.450000000000001 * scale + translationX,
15.0 * scale + translationY,
);
path.cubicTo(
13.261206035669957 * scale + translationX,
14.801269183941798 * scale + translationY,
12.999111470425106 * scale + translationX,
14.688748865697795 * scale + translationY,
12.725000000000001 * scale + translationX,
14.688748865697795 * scale + translationY,
);
path.cubicTo(
12.450888529574897 * scale + translationX,
14.688748865697795 * scale + translationY,
12.188793964330044 * scale + translationX,
14.8012691839418 * scale + translationY,
12.0 * scale + translationX,
15.0 * scale + translationY,
);
path.lineTo(
8.5 * scale + translationX,
18.56 * scale + translationY,
);
path.cubicTo(
7.644942751789832 * scale + translationX,
19.38034531847881 * scale + translationY,
6.295057576072854 * scale + translationX,
19.38034531847881 * scale + translationY,
5.440000127946414 * scale + translationX,
18.560000436523058 * scale + translationY,
);
path.cubicTo(
5.030817225851565 * scale + translationX,
18.15603418945586 * scale + translationY,
4.800496930156717 * scale + translationX,
17.604997178372695 * scale + translationY,
4.800496930156717 * scale + translationX,
17.030001237555666 * scale + translationY,
);
path.cubicTo(
4.800496930156717 * scale + translationX,
16.455005296738637 * scale + translationY,
5.030817225851566 * scale + translationX,
15.903968285655473 * scale + translationY,
5.44000039532019 * scale + translationX,
15.500001126371862 * scale + translationY,
);
path.lineTo(
9.0 * scale + translationX,
12.0 * scale + translationY,
);
path.cubicTo(
9.285376159720348 * scale + translationX,
11.755610118517865 * scale + translationY,
9.409681944265778 * scale + translationX,
11.37188160493643 * scale + translationY,
9.321810134984698 * scale + translationX,
11.006581027546721 * scale + translationY,
);
path.cubicTo(
9.233938325703619 * scale + translationX,
10.64128045015701 * scale + translationY,
8.94871954984299 * scale + translationX,
10.356061674296381 * scale + translationY,
8.58341897245328 * scale + translationX,
10.268189865015302 * scale + translationY,
);
path.cubicTo(
8.21811839506357 * scale + translationX,
10.180318055734222 * scale + translationY,
7.834389881482135 * scale + translationX,
10.304623840279652 * scale + translationY,
7.59 * scale + translationX,
10.59 * scale + translationY,
);
path.lineTo(
4.0 * scale + translationX,
14.08 * scale + translationY,
);
path.cubicTo(
2.3652373483790727 * scale + translationX,
15.714763854259994 * scale + translationY,
2.365237348379072 * scale + translationX,
18.36523826501238 * scale + translationY,
4.000000287906012 * scale + translationX,
20.00000120453932 * scale + translationY,
);
path.cubicTo(
5.634763227432951 * scale + translationX,
21.634764144066263 * scale + translationY,
8.285237638185341 * scale + translationX,
21.634764144066263 * scale + translationY,
9.920000577712281 * scale + translationX,
20.000001204539323 * scale + translationY,
);
path.lineTo(
13.45 * scale + translationX,
16.47 * scale + translationY,
);
path.cubicTo(
13.655211184610257 * scale + translationX,
16.28068441628393 * scale + translationY,
13.771932894176393 * scale + translationX,
16.0141988906262 * scale + translationY,
13.771932894176393 * scale + translationX,
15.735 * scale + translationY,
);
path.cubicTo(
13.771932894176393 * scale + translationX,
15.455801109373798 * scale + translationY,
13.655211184610257 * scale + translationX,
15.18931558371607 * scale + translationY,
13.45 * scale + translationX,
15.0 * scale + translationY,
);
path.close();
path.moveTo(
5.18 * scale + translationX,
6.59 * scale + translationY,
);
path.cubicTo(
5.366260638525449 * scale + translationX,
6.7747441636179 * scale + translationY,
5.617660122615664 * scale + translationX,
6.878895378455274 * scale + translationY,
5.88 * scale + translationX,
6.88 * scale + translationY,
);
path.cubicTo(
6.145802984650029 * scale + translationX,
6.881536758799638 * scale + translationY,
6.401281169195305 * scale + translationX,
6.777186514407904 * scale + translationY,
6.589999999999999 * scale + translationX,
6.589999999999999 * scale + translationY,
);
path.cubicTo(
6.977723594710799 * scale + translationX,
6.199962545689076 * scale + translationY,
6.977723594710799 * scale + translationX,
5.570037454310923 * scale + translationY,
6.59 * scale + translationX,
5.18 * scale + translationY,
);
path.lineTo(
5.3 * scale + translationX,
3.89 * scale + translationY,
);
path.cubicTo(
4.903239722544299 * scale + translationX,
3.5502232040712998 * scale + translationY,
4.311805828454295 * scale + translationX,
3.5730677303189706 * scale + translationY,
3.942436779386633 * scale + translationX,
3.942436779386633 * scale + translationY,
);
path.cubicTo(
3.5730677303189706 * scale + translationX,
4.311805828454295 * scale + translationY,
3.5502232040712993 * scale + translationX,
4.903239722544299 * scale + translationY,
3.8899999999999997 * scale + translationX,
5.3 * scale + translationY,
);
path.close();
path.moveTo(
21.259999999999998 * scale + translationX,
13.92 * scale + translationY,
);
path.lineTo(
19.499999999999996 * scale + translationX,
13.45 * scale + translationY,
);
path.cubicTo(
19.14442100772292 * scale + translationX,
13.327094936053419 * scale + translationY,
18.749950185085297 * scale + translationX,
13.41416345552108 * scale + translationY,
18.479143454454796 * scale + translationX,
13.675325836306893 * scale + translationY,
);
path.cubicTo(
18.208336723824296 * scale + translationX,
13.936488217092705 * scale + translationY,
18.10702697944752 * scale + translationX,
14.327543830387041 * scale + translationY,
18.21696255351261 * scale + translationX,
14.68734411394373 * scale + translationY,
);
path.cubicTo(
18.326898127577696 * scale + translationX,
15.04714439750042 * scale + translationY,
18.629472888958084 * scale + translationX,
15.3147946744857 * scale + translationY,
19.0 * scale + translationX,
15.379999999999999 * scale + translationY,
);
path.lineTo(
20.76 * scale + translationX,
15.850000000000001 * scale + translationY,
);
path.lineTo(
21.020000000000003 * scale + translationX,
15.850000000000001 * scale + translationY,
);
path.cubicTo(
21.57220739290263 * scale + translationX,
15.921650698317052 * scale + translationY,
22.07797266254331 * scale + translationX,
15.532158455506496 * scale + translationY,
22.149757363626396 * scale + translationX,
14.979968447175064 * scale + translationY,
);
path.cubicTo(
22.22154206470948 * scale + translationX,
14.427778438843635 * scale + translationY,
21.832172555954436 * scale + translationX,
13.921918674841637 * scale + translationY,
21.27999998224448 * scale + translationX,
13.849999988443892 * scale + translationY,
);
path.close();
path.moveTo(
15.38 * scale + translationX,
19.0 * scale + translationY,
);
path.cubicTo(
15.30988761168527 * scale + translationX,
18.743958270329507 * scale + translationY,
15.14084445759931 * scale + translationX,
18.526302092086937 * scale + translationY,
14.910123412520251 * scale + translationX,
18.394997432285844 * scale + translationY,
);
path.cubicTo(
14.679402367441192 * scale + translationX,
18.263692772484752 * scale + translationY,
14.405939797543427 * scale + translationX,
18.229516424882927 * scale + translationY,
14.15 * scale + translationX,
18.299999999999997 * scale + translationY,
);
path.cubicTo(
13.62176814107399 * scale + translationX,
18.446129050314692 * scale + translationY,
13.309584376256451 * scale + translationX,
18.990220754710972 * scale + translationY,
13.450000000000001 * scale + translationX,
19.52 * scale + translationY,
);
path.lineTo(
13.920000000000002 * scale + translationX,
21.28 * scale + translationY,
);
path.cubicTo(
14.040664137329568 * scale + translationX,
21.729217919767752 * scale + translationY,
14.455131185717134 * scale + translationX,
22.03592353557455 * scale + translationY,
14.920000000000002 * scale + translationX,
22.02 * scale + translationY,
);
path.cubicTo(
15.00638720569475 * scale + translationX,
22.02982742266901 * scale + translationY,
15.093611183515666 * scale + translationX,
22.02982742266901 * scale + translationY,
15.179999187648308 * scale + translationX,
22.01999882160841 * scale + translationY,
);
path.cubicTo(
15.437887507550604 * scale + translationX,
21.952048964681154 * scale + translationY,
15.65794887534694 * scale + translationX,
21.783901775869822 * scale + translationY,
15.791273809806396 * scale + translationX,
21.55293041053865 * scale + translationY,
);
path.cubicTo(
15.924598744265854 * scale + translationX,
21.32195904520748 * scale + translationY,
15.960140624357539 * scale + translationX,
21.0473006073959 * scale + translationY,
15.890000000000002 * scale + translationX,
20.79 * scale + translationY,
);
path.close();
path.moveTo(
18.82 * scale + translationX,
17.43 * scale + translationY,
);
path.cubicTo(
18.423239722544302 * scale + translationX,
17.090223204071293 * scale + translationY,
17.831805828454296 * scale + translationX,
17.113067730318964 * scale + translationY,
17.462436779386632 * scale + translationX,
17.482436779386628 * scale + translationY,
);
path.cubicTo(
17.093067730318968 * scale + translationX,
17.85180582845429 * scale + translationY,
17.070223204071297 * scale + translationX,
18.443239722544295 * scale + translationY,
17.41 * scale + translationX,
18.839999999999996 * scale + translationY,
);
path.lineTo(
18.7 * scale + translationX,
20.13 * scale + translationY,
);
path.cubicTo(
19.090037454310924 * scale + translationX,
20.517723594710795 * scale + translationY,
19.719962545689075 * scale + translationX,
20.517723594710798 * scale + translationY,
20.11 * scale + translationX,
20.13 * scale + translationY,
);
path.cubicTo(
20.4977235947108 * scale + translationX,
19.739962545689075 * scale + translationY,
20.4977235947108 * scale + translationX,
19.11003745431092 * scale + translationY,
20.11 * scale + translationX,
18.719999999999995 * scale + translationY,
);
path.close();
path.moveTo(
21.2 * scale + translationX,
7.0 * scale + translationY,
);
path.cubicTo(
21.231791761167806 * scale + translationX,
5.298620418469935 * scale + translationY,
20.22416379906845 * scale + translationX,
3.7494201620667926 * scale + translationY,
18.65600474205384 * scale + translationX,
3.088678986358391 * scale + translationY,
);
path.cubicTo(
17.087845685039238 * scale + translationX,
2.4279378106499894 * scale + translationY,
15.27537620286842 * scale + translationX,
2.7888947618831152 * scale + translationY,
14.079999080716663 * scale + translationX,
3.9999997388399606 * scale + translationY,
);
path.lineTo(
10.55 * scale + translationX,
7.5600000000000005 * scale + translationY,
);
path.cubicTo(
10.152354583720788 * scale + translationX,
7.9604061274428854 * scale + translationY,
10.154593159860424 * scale + translationX,
8.607354631797415 * scale + translationY,
10.554999583595821 * scale + translationX,
9.004999631920844 * scale + translationY,
);
path.cubicTo(
10.955406007331218 * scale + translationX,
9.402644632044273 * scale + translationY,
11.602354511685746 * scale + translationX,
9.40040605590464 * scale + translationY,
11.999999511809177 * scale + translationX,
8.999999632169242 * scale + translationY,
);
path.lineTo(
15.5 * scale + translationX,
5.44 * scale + translationY,
);
path.cubicTo(
16.355057812679643 * scale + translationX,
4.619655245990667 * scale + translationY,
17.70494298839662 * scale + translationX,
4.619655245990667 * scale + translationY,
18.560000436523058 * scale + translationX,
5.440000127946415 * scale + translationY,
);
path.cubicTo(
18.969184518208092 * scale + translationX,
5.843967554603802 * scale + translationY,
19.199504813902937 * scale + translationX,
6.395004565686965 * scale + translationY,
19.199504813902937 * scale + translationX,
6.970000506503992 * scale + translationY,
);
path.cubicTo(
19.199504813902937 * scale + translationX,
7.5449964473210205 * scale + translationY,
18.969184518208092 * scale + translationX,
8.096033458404184 * scale + translationY,
18.56000134873947 * scale + translationX,
8.500000617687796 * scale + translationY,
);
path.lineTo(
15.0 * scale + translationX,
12.0 * scale + translationY,
);
path.cubicTo(
14.612276405289201 * scale + translationX,
12.390037454310923 * scale + translationY,
14.612276405289201 * scale + translationX,
13.019962545689078 * scale + translationY,
15.0 * scale + translationX,
13.41 * scale + translationY,
);
path.cubicTo(
15.390037454310923 * scale + translationX,
13.7977235947108 * scale + translationY,
16.019962545689076 * scale + translationX,
13.7977235947108 * scale + translationY,
16.41 * scale + translationX,
13.41 * scale + translationY,
);
path.lineTo(
20.0 * scale + translationX,
9.92 * scale + translationY,
);
path.cubicTo(
20.765405058712826 * scale + translationX,
9.140346762609251 * scale + translationY,
21.19600221947421 * scale + translationX,
8.092560338089895 * scale + translationY,
21.199999863045164 * scale + translationX,
6.999999954779064 * scale + translationY,
);
path.close();
canvas.drawPath(path, paint);
}