mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 15:17:31 +00:00
63 lines
2.0 KiB
Dart
63 lines
2.0 KiB
Dart
import 'dart:ui';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:syncrow_web/pages/spaces_management/view/spaces_management_page.dart';
|
|
import 'package:syncrow_web/utils/color_manager.dart';
|
|
|
|
class CurvedLinePainter extends CustomPainter {
|
|
final List<Connection> connections;
|
|
|
|
CurvedLinePainter(this.connections);
|
|
|
|
@override
|
|
void paint(Canvas canvas, Size size) {
|
|
final paint = Paint()
|
|
..color = ColorsManager.blackColor
|
|
..strokeWidth = 2
|
|
..style = PaintingStyle.stroke;
|
|
|
|
// Ensure connections exist before painting
|
|
if (connections.isEmpty) {
|
|
return; // Nothing to paint if there are no connections
|
|
}
|
|
|
|
for (var connection in connections) {
|
|
// Ensure positions are valid before drawing lines
|
|
if (connection.startSpace.position == null ||
|
|
connection.endSpace.position == null) {
|
|
continue;
|
|
}
|
|
|
|
Offset start = connection.startSpace.position +
|
|
Offset(75, 60); // Center bottom of start space
|
|
Offset end = connection.endSpace.position +
|
|
Offset(75, 0); // Center top of end space
|
|
|
|
if (connection.direction == 'down') {
|
|
// Curved line for down connections
|
|
final controlPoint = Offset((start.dx + end.dx) / 2, start.dy + 50);
|
|
final path = Path()
|
|
..moveTo(start.dx, start.dy)
|
|
..quadraticBezierTo(controlPoint.dx, controlPoint.dy, end.dx, end.dy);
|
|
canvas.drawPath(path, paint);
|
|
} else if (connection.direction == 'right') {
|
|
// Straight line for right connections
|
|
canvas.drawLine(start, end, paint);
|
|
} else if (connection.direction == 'left') {
|
|
// Straight line for left connections
|
|
canvas.drawLine(start, end, paint);
|
|
}
|
|
|
|
// Draw small connection dots at the start and end points
|
|
final dotPaint = Paint()..color = ColorsManager.blackColor;
|
|
canvas.drawCircle(start, 5, dotPaint); // Start dot
|
|
canvas.drawCircle(end, 5, dotPaint); // End dot
|
|
}
|
|
}
|
|
|
|
@override
|
|
bool shouldRepaint(covariant CustomPainter oldDelegate) {
|
|
return true;
|
|
}
|
|
}
|