forked from lxm_flutter/FlutterUnit
69 lines
1.4 KiB
Dart
69 lines
1.4 KiB
Dart
import 'dart:math';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class TiledLines extends StatefulWidget {
|
|
@override
|
|
_TiledLinesState createState() => _TiledLinesState();
|
|
}
|
|
|
|
class _TiledLinesState extends State<TiledLines> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GestureDetector(
|
|
onTap: (){
|
|
setState(() {
|
|
|
|
});
|
|
},
|
|
child: CustomPaint(
|
|
painter: TiledLinesPainter(20),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class TiledLinesPainter extends CustomPainter {
|
|
final double step;
|
|
|
|
TiledLinesPainter(this.step);
|
|
|
|
void _drawLine(
|
|
Canvas canvas,
|
|
double x,
|
|
double y,
|
|
double width,
|
|
double height,
|
|
) {
|
|
final bool isLeftToRight = Random().nextBool();
|
|
|
|
final Paint paint = Paint()
|
|
..strokeCap = StrokeCap.square
|
|
..strokeWidth = 2;
|
|
|
|
Offset p1;
|
|
Offset p2;
|
|
|
|
if (isLeftToRight) {
|
|
p1 = Offset(x, y);
|
|
p2 = Offset(x + width, y + height);
|
|
} else {
|
|
p1 = Offset(x + width, y);
|
|
p2 = Offset(x, y + height);
|
|
}
|
|
|
|
canvas.drawLine(p1, p2, paint);
|
|
}
|
|
|
|
@override
|
|
void paint(Canvas canvas, Size size) {
|
|
canvas.clipRect(Rect.fromPoints(Offset.zero, Offset(size.width,size.height)));
|
|
for (double x = 0; x < size.width; x += step) {
|
|
for (double y = 0; y < size.height; y += step) {
|
|
_drawLine(canvas, x, y, step, step);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool shouldRepaint(TiledLinesPainter oldDelegate) => true;
|
|
}
|