import 'dart:math'; import 'package:flutter/material.dart'; import '../components/coordinate_pro.dart'; /// create by 张风捷特烈 on 2020-03-19 /// contact me by email 1981462002@qq.com /// 说明: 纸 class Paper extends StatefulWidget { final Color color; final double angle; const Paper({Key? key, this.color = Colors.lightBlue, this.angle = 30 }) : super(key: key); @override _PaperState createState() => _PaperState(); } class _PaperState extends State{ @override Widget build(BuildContext context) { return Center( child: CustomPaint( size: Size(100, 100), painter: PicManPainter(color: widget.color, angle : widget.angle), // 背景 ), ); } } class PicManPainter extends CustomPainter { final Color color; // 颜色 final double angle; // 角度(与x轴交角 角度制) Paint _paint = Paint(); PicManPainter({this.color = Colors.yellowAccent, this.angle = 30}); @override void paint(Canvas canvas, Size size) { canvas.clipRect(Offset.zero & size); //剪切画布 final double radius = size.width / 2; canvas.translate(radius, size.height / 2); _drawHead(canvas, size); _drawEye(canvas, radius); } //绘制头 void _drawHead(Canvas canvas, Size size) { var rect = Rect.fromCenter( center: Offset(0, 0), height: size.width, width: size.height); var a = angle / 180 * pi; canvas.drawArc(rect, a, 2 * pi - a.abs() * 2, true, _paint..color = color); } //绘制眼睛 void _drawEye(Canvas canvas, double radius) { canvas.drawCircle(Offset(radius * 0.15, -radius * 0.6), radius * 0.12, _paint..color = Colors.white); } @override bool shouldRepaint(covariant PicManPainter oldDelegate) => oldDelegate.color != color || oldDelegate.angle != angle; }