buildPdfDataTable function
Build data table for PDF showing daily weather statistics.
Implementation
pw.Widget buildPdfDataTable({
required Map<DateTime, double> dailyData,
required Map<DateTime, (double, double)> dailyMinMax,
required String dataType,
required String unit,
Map<DateTime, int>? precipitationHours,
}) {
final dateFormat = DateFormat('yyyy-MM-dd');
return pw.TableHelper.fromTextArray(
headerStyle: pw.TextStyle(fontWeight: pw.FontWeight.bold),
cellStyle: const pw.TextStyle(fontSize: 10),
headerDecoration: const pw.BoxDecoration(color: PdfColors.grey300),
cellHeight: 25,
cellAlignments: {
0: pw.Alignment.centerLeft,
1: pw.Alignment.centerRight,
2: pw.Alignment.centerRight,
3: pw.Alignment.centerRight,
},
headers: [
'Date',
dataType == 'precipitation' ? 'Total$unit' : 'Average$unit',
dataType == 'precipitation' ? 'Hours' : 'Min$unit',
dataType == 'precipitation' ? 'Max mm/h' : 'Max$unit',
],
data: (dailyData.entries.toList()..sort((a, b) => a.key.compareTo(b.key)))
.map((entry) {
final date = entry.key;
// For precipitation: dailyData contains daily totals
// For other types: dailyData contains daily averages.
final value = entry.value;
final (dayMin, dayMax) = dailyMinMax[date] ?? (value, value);
// For precipitation, show hours with rain and max hourly rate.
final secondCol = dataType == 'precipitation'
? (precipitationHours?[date] ?? 0).toString()
: dayMin.toStringAsFixed(1);
return [
dateFormat.format(date),
value.toStringAsFixed(1),
secondCol,
dayMax.toStringAsFixed(1),
];
})
.toList(),
);
}