from<T, K> static method
Future<Table>
from<T, K>(
- BuildContext context,
- List<
TTableHeader< headers,T, K> > - List<
T> items, { - TPdfTableDecoration decoration = const TPdfTableDecoration(),
Creates a PDF table widget from headers and items.
Implementation
static Future<pw.Table> from<T, K>(
BuildContext context,
List<TTableHeader<T, K>> headers,
List<T> items, {
TPdfTableDecoration decoration = const TPdfTableDecoration(),
}) async {
final colors = context.colors;
final effectiveHeaders = headers.where((header) => header.map != null || header.builder != null).toList();
final imageCache = await TPdfWidgetHelper.preCacheImages(context, effectiveHeaders, items);
final tHeaders = effectiveHeaders.map((header) => header.text).toList();
final tData = items.asMap().entries.map((itemEntry) {
final index = itemEntry.key;
final item = itemEntry.value;
return effectiveHeaders.map((header) {
if (header.builder != null) {
final listItem = TListItem<T, K>(key: index as dynamic, data: item);
final widget = header.builder!(context, listItem, index);
final pdfWidget = TPdfWidgetHelper.convert(widget, colors, imageCache: imageCache);
// If conversion was successful, return the PDF widget
if (pdfWidget is! pw.SizedBox) {
return pdfWidget;
}
}
return header.getValue(item);
}).toList();
}).toList();
return pw.TableHelper.fromTextArray(
headers: tHeaders,
data: tData,
border: decoration.getBorder(colors),
headerStyle: decoration.getHeaderStyle(colors),
cellStyle: decoration.getCellStyle(colors),
headerAlignment: decoration.headerAlignment,
cellAlignment: decoration.cellAlignment,
headerPadding: decoration.headerPadding,
cellPadding: decoration.cellPadding,
);
}