Files
iroute/assets/draw/p04/s07.dart
2023-12-16 12:40:32 +08:00

126 lines
3.3 KiB
Dart

import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import '../components/coordinate.dart';
/// create by 张风捷特烈 on 2020-03-19
/// contact me by email 1981462002@qq.com
/// 说明: 纸
class Paper extends StatelessWidget {
const Paper({super.key});
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: CustomPaint(
// 使用CustomPaint
painter: PaperPainter(),
),
);
}
}
class PaperPainter extends CustomPainter {
final Coordinate coordinate = Coordinate(step: 25);
late Paint _paint;
final double strokeWidth = 0.5;
final Color color = Colors.blue;
PaperPainter() {
_paint = Paint()
..style = PaintingStyle.fill
..strokeWidth = strokeWidth
..color = color;
}
@override
void paint(Canvas canvas, Size size) {
coordinate.paint(canvas, size);
canvas.translate(size.width / 2, size.height / 2);
_drawTextLeft(canvas);
_drawTextTextAlignRight(canvas);
_drawTextPaint(canvas, "100", offset: Offset(0, 0));
}
void _drawTextLeft(Canvas canvas) {
var builder = ui.ParagraphBuilder(ui.ParagraphStyle(
textAlign: TextAlign.left,
fontSize: 40,
textDirection: TextDirection.ltr,
maxLines: 1,
))
..pushStyle(
ui.TextStyle(
color: Colors.black87, textBaseline: ui.TextBaseline.alphabetic),
)
..addText("Flutter Unit");
canvas.drawParagraph(
builder.build()..layout(ui.ParagraphConstraints(width: 300)),
Offset(0, -100));
canvas.drawRect(Rect.fromLTRB(0, 0 - 100.0, 300, 40 - 100.0),
_paint..color = Colors.blue.withAlpha(33));
}
void _drawTextCenter(Canvas canvas,String str) {
var builder = ui.ParagraphBuilder(ui.ParagraphStyle(
textAlign: TextAlign.center,
fontSize: 12,
textDirection: TextDirection.ltr,
maxLines: 1,
))
..pushStyle(
ui.TextStyle(
color: Colors.black87, textBaseline: ui.TextBaseline.alphabetic),
)
..addText(str);
canvas.drawParagraph(
builder.build()..layout(ui.ParagraphConstraints(width: 12.0*str.length)),
Offset(0, 0));
}
void _drawTextTextAlignRight(Canvas canvas) {
var builder = ui.ParagraphBuilder(ui.ParagraphStyle(
textAlign: TextAlign.right,
fontSize: 40,
textDirection: TextDirection.ltr,
maxLines: 1,
))
..pushStyle(
ui.TextStyle(
color: Colors.black87, textBaseline: ui.TextBaseline.alphabetic),
)
..addText("Flutter Unit");
canvas.drawParagraph(
builder.build()..layout(ui.ParagraphConstraints(width: 300)),
Offset(0, 100));
canvas.drawRect(Rect.fromLTRB(0, 0 + 100.0, 300, 40 + 100.0),
_paint..color = Colors.blue.withAlpha(33));
}
void _drawTextPaint(Canvas canvas, String text,
{Offset offset = Offset.zero}) {
TextPainter(
text: TextSpan(
text: text, style: TextStyle(fontSize: 12, color: Colors.black)),
textAlign: TextAlign.left,
textDirection: TextDirection.ltr)
..layout(maxWidth: 300)
..paint(canvas, offset);
canvas.drawRect(Rect.fromLTRB(0, 0, 300, 40),
_paint..color = Colors.blue.withAlpha(33));
}
@override
bool shouldRepaint(PaperPainter oldDelegate) => false;
}