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 / 19.87466279122853;
final scaleY = size.height / 20.345036321857933;
final scale = math.min(scaleX, scaleY);
final translationX = (size.width - 19.87466279122853 * scale) / 2 - 2.1473372087714684 * scale;
final translationY = (size.height - 20.345036321857933 * scale) / 2 - 1.7506163305883027 * scale;
final path = Path();
final paint = Paint()..color = color;
path.moveTo(
11.022 * scale + translationX,
2.0 * scale + translationY,
);
path.lineTo(
9.022 * scale + translationX,
2.0 * scale + translationY,
);
path.cubicTo(
8.469715250169207 * scale + translationX,
2.0 * scale + translationY,
8.022 * scale + translationX,
2.4477152501692068 * scale + translationY,
8.022 * scale + translationX,
3.0 * scale + translationY,
);
path.cubicTo(
8.022 * scale + translationX,
3.5522847498307932 * scale + translationY,
8.469715250169207 * scale + translationX,
4.0 * scale + translationY,
9.022 * scale + translationX,
4.0 * scale + translationY,
);
path.lineTo(
9.022 * scale + translationX,
6.0 * scale + translationY,
);
path.lineTo(
7.83771 * scale + translationX,
6.0 * scale + translationY,
);
path.cubicTo(
7.956269665579366 * scale + translationX,
5.67976681996226 * scale + translationY,
8.018616431963805 * scale + translationX,
5.341458901006057 * scale + translationY,
8.021999918512947 * scale + translationX,
4.999999949210263 * scale + translationY,
);
path.cubicTo(
8.022073926726296 * scale + translationX,
3.6421179245484887 * scale + translationY,
7.110060225409303 * scale + translationX,
2.4534969059752374 * scale + translationY,
5.798445241838008 * scale + translationX,
2.10205661828177 * scale + translationY,
);
path.cubicTo(
4.486830258266716 * scale + translationX,
1.7506163305883027 * scale + translationY,
3.1026975180489766 * scale + translationX,
2.3239970720170406 * scale + translationY,
2.4238300722357633 * scale + translationX,
3.5000001043081292 * scale + translationY,
);
path.cubicTo(
2.1473372087714684 * scale + translationX,
3.978426734087179 * scale + translationY,
2.311209368528745 * scale + translationX,
4.590416437871044 * scale + translationY,
2.789779888515119 * scale + translationX,
4.866660374091114 * scale + translationY,
);
path.cubicTo(
3.2683504085014925 * scale + translationX,
5.142904310311184 * scale + translationY,
3.8802548250633846 * scale + translationX,
4.978713971761597 * scale + translationY,
4.156249893628106 * scale + translationX,
4.49999988483043 * scale + translationY,
);
path.cubicTo(
4.335091292801824 * scale + translationX,
4.190941902552934 * scale + translationY,
4.664927495883059 * scale + translationX,
4.0004503038921 * scale + translationY,
5.022000306506616 * scale + translationX,
4.000000244131115 * scale + translationY,
);
path.cubicTo(
5.5742847498307935 * scale + translationX,
4.0 * scale + translationY,
6.022 * scale + translationX,
4.447715250169207 * scale + translationY,
6.022 * scale + translationX,
5.0 * scale + translationY,
);
path.cubicTo(
6.022 * scale + translationX,
5.552284749830793 * scale + translationY,
5.5742847498307935 * scale + translationX,
6.0 * scale + translationY,
5.022 * scale + translationX,
6.0 * scale + translationY,
);
path.cubicTo(
4.469715250169207 * scale + translationX,
6.0 * scale + translationY,
4.022 * scale + translationX,
6.447715250169207 * scale + translationY,
4.022 * scale + translationX,
7.0 * scale + translationY,
);
path.cubicTo(
4.022 * scale + translationX,
7.552284749830793 * scale + translationY,
4.469715250169207 * scale + translationX,
8.0 * scale + translationY,
5.022 * scale + translationX,
8.0 * scale + translationY,
);
path.cubicTo(
5.5742847498307935 * scale + translationX,
8.0 * scale + translationY,
6.022 * scale + translationX,
8.447715250169207 * scale + translationY,
6.022 * scale + translationX,
9.0 * scale + translationY,
);
path.cubicTo(
6.022 * scale + translationX,
9.552284749830793 * scale + translationY,
5.5742847498307935 * scale + translationX,
10.0 * scale + translationY,
5.022 * scale + translationX,
10.0 * scale + translationY,
);
path.cubicTo(
4.664938216372114 * scale + translationX,
9.99953986257823 * scale + translationY,
4.335115916600334 * scale + translationX,
9.809049692678158 * scale + translationY,
4.156280253669317 * scale + translationX,
9.500000579811399 * scale + translationY,
);
path.cubicTo(
3.880284825062616 * scale + translationX,
9.021285669933075 * scale + translationY,
3.268380408500724 * scale + translationX,
8.857095331383489 * scale + translationY,
2.78980988851435 * scale + translationX,
9.133339267603558 * scale + translationY,
);
path.cubicTo(
2.311239368527977 * scale + translationX,
9.409583203823628 * scale + translationY,
2.1473672087707003 * scale + translationX,
10.021572907607492 * scale + translationY,
2.423859937965574 * scale + translationX,
10.499999731271004 * scale + translationY,
);
path.cubicTo(
3.1027406355122658 * scale + translationX,
11.675971739016678 * scale + translationY,
4.486854714162701 * scale + translationX,
12.249327444541294 * scale + translationY,
5.798449121655227 * scale + translationX,
11.897890786787327 * scale + translationY,
);
path.cubicTo(
7.110043529147753 * scale + translationX,
11.54645412903336 * scale + translationY,
8.02205040202871 * scale + translationX,
10.357861679287078 * scale + translationY,
8.02200023907423 * scale + translationX,
9.000000268220901 * scale + translationY,
);
path.cubicTo(
8.018626039835615 * scale + translationX,
8.658542715016846 * scale + translationY,
7.956289432637814 * scale + translationX,
8.320234850055366 * scale + translationY,
7.837739920384649 * scale + translationX,
7.999999918736421 * scale + translationY,
);
path.lineTo(
9.022 * scale + translationX,
8.0 * scale + translationY,
);
path.lineTo(
9.022 * scale + translationX,
11.0 * scale + translationY,
);
path.cubicTo(
9.022 * scale + translationX,
11.552284749830793 * scale + translationY,
9.469715250169207 * scale + translationX,
12.0 * scale + translationY,
10.022 * scale + translationX,
12.0 * scale + translationY,
);
path.cubicTo(
10.574284749830793 * scale + translationX,
12.0 * scale + translationY,
11.022 * scale + translationX,
11.552284749830793 * scale + translationY,
11.022 * scale + translationX,
11.0 * scale + translationY,
);
path.lineTo(
11.022 * scale + translationX,
4.0 * scale + translationY,
);
path.cubicTo(
11.574284749830793 * scale + translationX,
4.0 * scale + translationY,
12.022 * scale + translationX,
3.5522847498307932 * scale + translationY,
12.022 * scale + translationX,
3.0 * scale + translationY,
);
path.cubicTo(
12.022 * scale + translationX,
2.4477152501692068 * scale + translationY,
11.574284749830793 * scale + translationX,
2.0 * scale + translationY,
11.022 * scale + translationX,
2.0 * scale + translationY,
);
path.close();
path.moveTo(
14.022 * scale + translationX,
7.0 * scale + translationY,
);
path.lineTo(
15.022 * scale + translationX,
7.0 * scale + translationY,
);
path.cubicTo(
15.573987530110124 * scale + translationX,
7.000716054498824 * scale + translationY,
16.021283511735334 * scale + translationX,
7.448012036124036 * scale + translationY,
16.021999698123693 * scale + translationX,
7.999999849269102 * scale + translationY,
);
path.lineTo(
16.022 * scale + translationX,
9.0 * scale + translationY,
);
path.cubicTo(
16.022 * scale + translationX,
9.552284749830793 * scale + translationY,
16.469715250169205 * scale + translationX,
10.0 * scale + translationY,
17.022 * scale + translationX,
10.0 * scale + translationY,
);
path.cubicTo(
17.57428474983079 * scale + translationX,
10.0 * scale + translationY,
18.022 * scale + translationX,
9.552284749830793 * scale + translationY,
18.022 * scale + translationX,
9.0 * scale + translationY,
);
path.lineTo(
18.022 * scale + translationX,
8.0 * scale + translationY,
);
path.cubicTo(
18.020191313848304 * scale + translationX,
6.3438947975992255 * scale + translationY,
16.678104013284745 * scale + translationX,
5.001807497035664 * scale + translationY,
15.021999224094301 * scale + translationX,
4.999999741743544 * scale + translationY,
);
path.lineTo(
14.021999999999998 * scale + translationX,
5.0 * scale + translationY,
);
path.cubicTo(
13.469715250169205 * scale + translationX,
5.0 * scale + translationY,
13.021999999999998 * scale + translationX,
5.447715250169207 * scale + translationY,
13.021999999999998 * scale + translationX,
6.0 * scale + translationY,
);
path.cubicTo(
13.021999999999998 * scale + translationX,
6.552284749830793 * scale + translationY,
13.469715250169205 * scale + translationX,
7.0 * scale + translationY,
14.021999999999998 * scale + translationX,
7.0 * scale + translationY,
);
path.close();
path.moveTo(
10.022 * scale + translationX,
16.0 * scale + translationY,
);
path.lineTo(
9.022 * scale + translationX,
16.0 * scale + translationY,
);
path.cubicTo(
8.470012016868163 * scale + translationX,
15.999283512149844 * scale + translationY,
8.02271603524295 * scale + translationX,
15.551987530524634 * scale + translationY,
8.021999848854593 * scale + translationX,
14.999999717379566 * scale + translationY,
);
path.lineTo(
8.022 * scale + translationX,
14.0 * scale + translationY,
);
path.cubicTo(
8.022 * scale + translationX,
13.447715250169207 * scale + translationY,
7.5742847498307935 * scale + translationX,
13.0 * scale + translationY,
7.022 * scale + translationX,
13.0 * scale + translationY,
);
path.cubicTo(
6.469715250169207 * scale + translationX,
13.0 * scale + translationY,
6.022 * scale + translationX,
13.447715250169207 * scale + translationY,
6.022 * scale + translationX,
14.0 * scale + translationY,
);
path.lineTo(
6.022 * scale + translationX,
15.0 * scale + translationY,
);
path.cubicTo(
6.023807444248044 * scale + translationX,
16.656104014421075 * scale + translationY,
7.365894744811606 * scale + translationX,
17.998191314984638 * scale + translationY,
9.02199953400205 * scale + translationX,
17.999999070276758 * scale + translationY,
);
path.lineTo(
10.022 * scale + translationX,
18.0 * scale + translationY,
);
path.cubicTo(
10.574284749830793 * scale + translationX,
18.0 * scale + translationY,
11.022 * scale + translationX,
17.552284749830793 * scale + translationY,
11.022 * scale + translationX,
17.0 * scale + translationY,
);
path.cubicTo(
11.022 * scale + translationX,
16.447715250169207 * scale + translationY,
10.574284749830793 * scale + translationX,
16.0 * scale + translationY,
10.022 * scale + translationX,
16.0 * scale + translationY,
);
path.close();
path.moveTo(
21.022 * scale + translationX,
15.0 * scale + translationY,
);
path.cubicTo(
21.57428474983079 * scale + translationX,
15.0 * scale + translationY,
22.022 * scale + translationX,
14.552284749830793 * scale + translationY,
22.022 * scale + translationX,
14.0 * scale + translationY,
);
path.cubicTo(
22.022 * scale + translationX,
13.447715250169207 * scale + translationY,
21.57428474983079 * scale + translationX,
13.0 * scale + translationY,
21.022 * scale + translationX,
13.0 * scale + translationY,
);
path.lineTo(
18.022 * scale + translationX,
13.0 * scale + translationY,
);
path.lineTo(
18.022 * scale + translationX,
12.5 * scale + translationY,
);
path.cubicTo(
18.022 * scale + translationX,
11.947715250169207 * scale + translationY,
17.57428474983079 * scale + translationX,
11.5 * scale + translationY,
17.022 * scale + translationX,
11.5 * scale + translationY,
);
path.cubicTo(
16.469715250169205 * scale + translationX,
11.5 * scale + translationY,
16.022 * scale + translationX,
11.947715250169207 * scale + translationY,
16.022 * scale + translationX,
12.5 * scale + translationY,
);
path.lineTo(
16.022 * scale + translationX,
13.0 * scale + translationY,
);
path.lineTo(
13.021999999999998 * scale + translationX,
13.0 * scale + translationY,
);
path.cubicTo(
12.469715250169205 * scale + translationX,
13.0 * scale + translationY,
12.021999999999998 * scale + translationX,
13.447715250169207 * scale + translationY,
12.021999999999998 * scale + translationX,
14.0 * scale + translationY,
);
path.cubicTo(
12.021999999999998 * scale + translationX,
14.552284749830793 * scale + translationY,
12.469715250169205 * scale + translationX,
15.0 * scale + translationY,
13.021999999999998 * scale + translationX,
15.0 * scale + translationY,
);
path.lineTo(
18.206269999999996 * scale + translationX,
15.0 * scale + translationY,
);
path.cubicTo(
17.98004471025082 * scale + translationX,
15.919055256226446 * scale + translationY,
17.56243828389272 * scale + translationX,
16.78003265317815 * scale + translationY,
16.980740148083765 * scale + translationX,
17.526670152844652 * scale + translationY,
);
path.cubicTo(
16.74271070738856 * scale + translationX,
17.21811016723505 * scale + translationY,
16.532188249782113 * scale + translationX,
16.889278204207145 * scale + translationY,
16.351590082095182 * scale + translationX,
16.54395008306095 * scale + translationY,
);
path.cubicTo(
16.099721204773196 * scale + translationX,
16.052613383705722 * scale + translationY,
15.497233038100925 * scale + translationX,
15.858486292033195 * scale + translationY,
15.00589567746816 * scale + translationX,
16.110355749307242 * scale + translationY,
);
path.cubicTo(
14.514558316835398 * scale + translationX,
16.362225206581293 * scale + translationY,
14.320431225162867 * scale + translationX,
16.964713373253563 * scale + translationY,
14.572300682436916 * scale + translationX,
17.456050733886325 * scale + translationY,
);
path.cubicTo(
14.841613274553731 * scale + translationX,
17.9765114624417 * scale + translationY,
15.162953398550346 * scale + translationX,
18.468355172197757 * scale + translationY,
15.531399744377326 * scale + translationX,
18.92404968853959 * scale + translationY,
);
path.cubicTo(
14.80586930700753 * scale + translationX,
19.450846524141447 * scale + translationY,
13.980862447346562 * scale + translationX,
19.824726929273275 * scale + translationY,
13.106449980860555 * scale + translationX,
20.022999970760264 * scale + translationY,
);
path.cubicTo(
12.567887630806561 * scale + translationX,
20.141799554769715 * scale + translationY,
12.227154057029058 * scale + translationX,
20.674167123161855 * scale + translationY,
12.344823237127803 * scale + translationX,
21.21297753870013 * scale + translationY,
);
path.cubicTo(
12.46249241722655 * scale + translationX,
21.751787954238406 * scale + translationY,
12.994143740717867 * scale + translationX,
22.093638018454982 * scale + translationY,
13.533199913410398 * scale + translationX,
21.977099859383713 * scale + translationY,
);
path.cubicTo(
14.787889455444471 * scale + translationX,
21.699616978238698 * scale + translationY,
15.964831663994731 * scale + translationX,
21.14560346210707 * scale + translationY,
16.97820027005326 * scale + translationX,
20.355460323771563 * scale + translationY,
);
path.cubicTo(
18.000076746036452 * scale + translationX,
21.14602406393328 * scale + translationY,
19.18479641935891 * scale + translationX,
21.69974167620771 * scale + translationY,
20.446768472093147 * scale + translationX,
21.976608357774214 * scale + translationY,
);
path.cubicTo(
20.98615935407258 * scale + translationX,
22.095652652446237 * scale + translationY,
21.519907130588578 * scale + translationX,
21.754833264070136 * scale + translationY,
21.638846682540898 * scale + translationX,
21.21542115774702 * scale + translationY,
);
path.cubicTo(
21.757786234493214 * scale + translationX,
20.676009051423904 * scale + translationY,
21.41686482511694 * scale + translationX,
20.142326433140603 * scale + translationY,
20.877429993054875 * scale + translationX,
20.023489993338945 * scale + translationY,
);
path.cubicTo(
19.997227673482925 * scale + translationX,
19.827796065775292 * scale + translationY,
19.16536907043512 * scale + translationX,
19.45708319851869 * scale + translationY,
18.43133104727379 * scale + translationX,
18.933401075801562 * scale + translationY,
);
path.cubicTo(
19.356014746039605 * scale + translationX,
17.795162403473146 * scale + translationY,
19.9792920588228 * scale + translationX,
16.442466510723595 * scale + translationY,
20.24370989118085 * scale + translationX,
14.999999919368179 * scale + translationY,
);
path.close();
canvas.drawPath(path, paint);
}