drawVertical method

  1. @override
Widget drawVertical()
override

Implementation

@override
Widget drawVertical() {
  return LayoutBuilder(
    builder: (context, constraints) {
      final maxLayoutWidth = constraints.maxWidth;
      final maxLayoutHeight = constraints.maxHeight;
      final segmentWidth = maxLayoutHeight / domain.count;
      final rectWidth =
          configSeries.barWidth ?? maxLayoutHeight / (domain.count + 1);

      return SizedBox(
        width: maxLayoutWidth,
        height: maxLayoutHeight,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.end,
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: List.generate(domain.count, (index) {
            final item = data[domain.initialViewportIndex + index];

            if (item.measure == null ||
                item.measure == measure.viewport.start) {
              return SizedBox(height: segmentWidth);
            }

            final right = (measure.viewport.end - item.measure!) /
                measure.viewportRange *
                maxLayoutWidth;
            final left = (0 - measure.viewport.start) /
                measure.viewportRange *
                maxLayoutWidth;

            final (
              fillColor,
              fillGradient,
              strokeWidth,
              strokeColor,
              strokeGradient,
              tooltipSpec,
              labelSpec,
              backgroundSpec,
              borderRadius,
              labelPosition,
              rect,
            ) = configSeries.draw(item, index);

            final barItem = Row(
              children: [
                if (left > 0)
                  SizedBox(
                    width: left,
                    child: labelPosition == LabelPosition.outsideStart
                        ? labelSpec?.build()
                        : null,
                  ),
                Expanded(child: rect),
                if (right > 0)
                  SizedBox(
                    width: right,
                    child: labelPosition == LabelPosition.outsideEnd
                        ? labelSpec?.build()
                        : null,
                  ),
              ],
            );

            return SizedBox(
              height: segmentWidth,
              child: Center(
                child: SizedBox(
                  height: rectWidth,
                  child: backgroundSpec?.build(barItem) ?? barItem,
                ),
              ),
            );
          }),
        ),
      );
    },
  );
}