performLayout method

  1. @override
dynamic performLayout(
  1. PrinterConstraints constraints,
  2. PrinterCanvas canvas
)
override

布局

Implementation

@override
performLayout(PrinterConstraints constraints, PrinterCanvas canvas) {
  assert(constraints.maxHeight.isInfinite, '高度必须是浮动的');

  _constraints = constraints;

  double height = 0;
  List? data = this.dataSource!.execExpressionToValue(binding);
  if (data == null) {
    return;
  }
  if (size!.height!.isFinite) {
    height = data.length * size!.height!;
  } else {
    for (int y = 0; y < data.length; y++) {
      final rowData = data[y];

      var rowDataSource = RowDataSource(rowData, this.dataSource!, y);
      if (condition != null && condition != '') {
        var value = rowDataSource.execExpressionToValue(condition!);
        if (value != true) {
          continue;
        }
      }
      double rowHeight = 0;
      for (var child in children) {
        if (child.isRender) {
            child.setDataSource(rowDataSource);
            child.performLayout(constraints, canvas);
            rowHeight = Math.max(
                child.actualOffset!.y! + child.actualSize!.height!, rowHeight);
        }
      }

      height += rowHeight;
    }
  }
  actualSize =
      PrinterSize(size!.width!.isInfinite ? constraints.maxWidth : size!.width, height);
  actualOffset = offset;
}