generate method
Implementation
SvgWidget generate(Array ax, double xStart, double xEnd, double yStart,
double yEnd, double distDeltaX, double yMin, double yMax) {
if (ax.length != ay.length) {
throw FormatException('expected ax and ay to have same length');
}
stroke ??= Color.hex('#ff0000');
// main widgets list
var widgets = <SvgWidget>[];
switch (plotGeneralType) {
case PlotGeneralType.Line:
var points = <PointPair>[];
for (var i = 0; i < ax.length; i++) {
var xPoint = calcXPoint(xStart, i, distDeltaX);
var yPoint = scaleConversion(ay[i], yStart, yEnd, yMin, yMax);
points.add(PointPair(x: xPoint, y: yPoint));
}
widgets.add(Polyline(
points: points,
stroke: stroke,
fill: fill,
strokeWidth: strokeWidth,
strokeDasharray: strokeDasharray));
break;
case PlotGeneralType.Dot:
for (var i = 0; i < ax.length; i++) {
var xPoint = calcXPoint(xStart, i, distDeltaX);
var yPoint = scaleConversion(ay[i], yStart, yEnd, yMin, yMax);
widgets.add(Circle(
cx: xPoint,
cy: yPoint,
r: strokeWidth?.getValue() ?? 2.0,
stroke: stroke,
fill: fill ?? stroke,
strokeDasharray: strokeDasharray));
}
break;
case PlotGeneralType.Stem:
var middleY = yStart + ((yEnd - yStart) / 2);
for (var i = 0; i < ax.length; i++) {
var xPoint = calcXPoint(xStart, i, distDeltaX);
var yPoint = scaleConversion(ay[i], yStart, yEnd, yMin, yMax);
widgets.add(Line(
x1: xPoint,
y1: yPoint,
x2: xPoint,
y2: middleY,
strokeWidth: strokeWidth,
stroke: stroke,
strokeDasharray: strokeDasharray));
widgets.add(Circle(
cx: xPoint,
cy: yPoint,
r: strokeWidth?.getValue() ?? 2.0,
stroke: stroke,
fill: fill ?? stroke,
strokeDasharray: strokeDasharray));
}
break;
case PlotGeneralType.Bar:
var middleY = yStart + ((yEnd - yStart) / 2);
var width = strokeWidth?.getValue() ?? 2.0;
for (var i = 0; i < ax.length; i++) {
var xPoint = calcXPoint(xStart, i, distDeltaX);
var yPoint = scaleConversion(ay[i], yStart, yEnd, yMin, yMax);
var height = middleY - yPoint;
if (height >= 0) {
widgets.add(Rect(
x: xPoint,
y: yPoint,
width: width,
height: height,
stroke: stroke,
fill: fill ?? stroke,
strokeDasharray: strokeDasharray));
} else {
widgets.add(Rect(
x: xPoint,
y: middleY,
width: width,
height: height.abs(),
stroke: stroke,
fill: fill ?? stroke,
strokeDasharray: strokeDasharray));
}
}
break;
}
return Group(id: id, children: widgets);
}