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

138 lines
3.9 KiB
Dart

import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.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();
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);
// _drawTextWithParagraph(canvas,TextAlign.left);
// _drawTextWithParagraph(canvas,TextAlign.center);
// _drawTextWithParagraph(canvas,TextAlign.right);
// _drawWithTextPaint(canvas);
// _drawTextPaintShowSize(canvas);
_drawTextPaintWithPaint(canvas);
}
void _drawTextWithParagraph(Canvas canvas, TextAlign textAlign) {
var builder = ui.ParagraphBuilder(ui.ParagraphStyle(
textAlign: textAlign,
fontSize: 40,
textDirection: TextDirection.ltr,
maxLines: 1,
));
builder.pushStyle(
ui.TextStyle(
color: Colors.black87, textBaseline: ui.TextBaseline.alphabetic),
);
builder.addText("Flutter Unit");
ui.Paragraph paragraph = builder.build();
paragraph.layout(ui.ParagraphConstraints(width: 300));
canvas.drawParagraph(paragraph, Offset(0, 0));
canvas.drawRect(Rect.fromLTRB(0, 0, 300, 40),
_paint..color = Colors.blue.withAlpha(33));
}
void _drawWithTextPaint(Canvas canvas) {
var textPainter = TextPainter(
text: TextSpan(
text: 'Flutter Unit',
style: TextStyle(fontSize: 40, color: Colors.black)),
textAlign: TextAlign.center,
textDirection: TextDirection.ltr);
// 进行布局
textPainter.layout();
textPainter.paint(canvas, Offset.zero);
}
void _drawTextPaintShowSize(Canvas canvas) {
TextPainter textPainter = TextPainter(
text: TextSpan(
text: 'Flutter Unit',
style: TextStyle(
// foreground: Paint()..style=PaintingStyle.stroke,
fontSize: 40,
color: Colors.black)),
textAlign: TextAlign.center,
textDirection: TextDirection.ltr);
textPainter.layout(); // 进行布局
Size size = textPainter.size; // 尺寸必须在布局后获取
textPainter.paint(canvas, Offset(-size.width / 2, -size.height / 2));
canvas.drawRect(
Rect.fromLTRB(0, 0, size.width, size.height)
.translate(-size.width / 2, -size.height / 2),
_paint..color = Colors.blue.withAlpha(33));
}
void _drawTextPaintWithPaint(Canvas canvas) {
Paint textPaint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 1;
TextPainter textPainter = TextPainter(
text: TextSpan(
text: 'Flutter Unit by 张风捷特烈',
style: TextStyle(
foreground: textPaint, fontSize: 40)),
textAlign: TextAlign.center,
textDirection: TextDirection.ltr);
textPainter.layout(maxWidth: 280); // 进行布局
Size size = textPainter.size; // 尺寸必须在布局后获取
textPainter.paint(canvas, Offset(-size.width / 2, -size.height / 2));
canvas.drawRect(
Rect.fromLTRB(0, 0, size.width, size.height)
.translate(-size.width / 2, -size.height / 2),
_paint..color = Colors.blue.withAlpha(33));
}
@override
bool shouldRepaint(PaperPainter oldDelegate) => false;
}