exportTreeTableRows<T> function
TreeTableExportResult
exportTreeTableRows<T>({
- required List<
TreeTableRow< rows,T> > - required List<
DataTableColumn> columns, - String? treeColumnId,
- TreeTableCellBuilder<
T> ? cellBuilder, - TreeTableExportOptions options = const TreeTableExportOptions(),
Exports tree-table rows as sanitized TSV/CSV.
Implementation
TreeTableExportResult exportTreeTableRows<T>({
required List<TreeTableRow<T>> rows,
required List<DataTableColumn> columns,
String? treeColumnId,
TreeTableCellBuilder<T>? cellBuilder,
TreeTableExportOptions options = const TreeTableExportOptions(),
}) {
final start = options.startRow > rows.length ? rows.length : options.startRow;
final available = rows.length - start;
final limit = options.maxRows == null || options.maxRows! > available
? available
: options.maxRows!;
final output = StringBuffer();
final delimiter = options.format == DataTableExportFormat.tsv ? '\t' : ',';
void writeLine(List<String> fields) {
if (output.isNotEmpty) output.write('\n');
output.write(
fields
.map((field) => _encodeField(field, options.format))
.join(delimiter),
);
}
if (options.includeHeader) {
writeLine([
for (final column in columns) _sanitizeTreeTableText(column.title),
]);
}
final effectiveTreeColumnId = treeColumnId ?? _firstColumnId(columns);
for (var offset = 0; offset < limit; offset++) {
final row = rows[start + offset];
writeLine([
for (final column in columns)
_cellText(
row,
column.id,
effectiveTreeColumnId,
cellBuilder,
includeTreeIndent: options.includeTreeIndent,
includeTreeMarker: false,
),
]);
}
return TreeTableExportResult(
text: output.toString(),
rowCount: limit,
columnCount: columns.length,
startRow: start,
format: options.format,
truncated: start + limit < rows.length,
);
}