path method

  1. @override
Path path(
  1. bool close
)
override

Implementation

@override
Path path(bool close) {
  if (close && _closePath != null) {
    return _closePath!;
  }
  if (!close && _openPath != null) {
    return _openPath!;
  }

  Path path = Path();
  if (smoothRatio != null) {
    double smoothness = smoothRatio ?? 0.25;
    Offset firstPoint = _pointList.first;
    path.moveTo(firstPoint.dx, firstPoint.dy);
    List<Offset> controlList = _computeControlPoint(_pointList, smoothness: smoothness);
    for (int i = 0; i < (_pointList.length - 1) * 2; i += 2) {
      Offset leftControlPoint = controlList[i];
      Offset rightControlPoint = controlList[i + 1];
      Offset rightPoint = _pointList[i ~/ 2 + 1];
      path.cubicTo(leftControlPoint.dx, leftControlPoint.dy, rightControlPoint.dx, rightControlPoint.dy, rightPoint.dx, rightPoint.dy);
    }
  } else {
    Offset first = _pointList.first;
    path.moveTo(first.dx, first.dy);
    for (int i = 1; i < _pointList.length; i++) {
      Offset p = _pointList[i];
      path.lineTo(p.dx.toDouble(), p.dy.toDouble());
    }
  }
  if (close) {
    path.close();
  }
  if (_dashList.isNotEmpty) {
    path = dashPath(path, _dashList);
  }

  if (close) {
    _closePath = path;
  } else {
    _openPath = path;
  }
  return path;
}