| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import 'layer_controller.dart';
- class LayerTrace extends GetView<LayerController> {
- const LayerTrace({
- super.key,
- required this.onMapTrace,
- required this.color,
- });
- final List<Offset> onMapTrace;
- final Color color;
- @override
- Widget build(BuildContext context) {
- return SizedBox(
- width: context.width,
- height: context.height,
- child: Obx((){
- final matrix = controller.mapTransformMatrix.value;
- if(matrix.isZero()){
- return const SizedBox();
- }
- final onScreenTrace = onMapTrace.reversed.map((e) =>
- controller.mapOffsetToScreen(e)).toList();
- return CustomPaint(painter: _LayerTracePainter(onScreenTrace, color));
- }),
- );
- }
- }
- class _LayerTracePainter extends CustomPainter {
- final List<Offset> _points;
- final painter = Paint()
- ..strokeWidth = 3
- ..style = PaintingStyle.stroke
- ..isAntiAlias = true;
- final Color color;
- _LayerTracePainter(this._points, this.color);
- @override
- void paint(Canvas canvas, Size size) {
- if (_points.length > 1 ) {
- var alpha = 255;
- final lineCount = _points.length - 1;
- final alphaStep = (alpha / lineCount).round();
- for (var i = 1; i < _points.length; i++) {
- final p2 = _points[i];
- final p1 = _points[i - 1];
- painter.color = color.withAlpha(alpha);
- canvas.drawLine(p1, p2, painter);
- alpha -= alphaStep;
- if (alpha < 0) {
- alpha = 0;
- }
- }
- }
- }
- @override
- bool shouldRepaint(_LayerTracePainter oldDelegate) => false;
- }
|