import 'package:flutter/cupertino.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:syncfusion_flutter_charts/charts.dart'; // Widget für die Erstellung eines gestapelten Säulendiagramms class StackedColumnChart extends StatelessWidget { final List lowerValues; // Liste der unteren Werte für das Diagramm final List upperValues; // Liste der oberen Werte für das Diagramm const StackedColumnChart({ super.key, required this.lowerValues, required this.upperValues, }); @override Widget build(BuildContext context) { final localizations = AppLocalizations.of(context)!; return SfCartesianChart( legend: const Legend( isVisible: true, position: LegendPosition.top, ), primaryXAxis: CategoryAxis( title: AxisTitle(text: localizations.year), ), primaryYAxis: NumericAxis( title: AxisTitle(text: localizations.currency_written_out), ), series: [ // Serie für die Einzahlungen (untere Werte) StackedColumnSeries( dataSource: _getLowerChartData(), xValueMapper: (SalesData sales, _) => sales.year, yValueMapper: (SalesData sales, _) => sales.value, name: localizations.deposits, color: CupertinoColors.systemRed.highContrastColor, ), // Serie für die Zinsen (obere Werte) StackedColumnSeries( dataSource: _getUpperChartData(), xValueMapper: (SalesData sales, _) => sales.year, yValueMapper: (SalesData sales, _) => sales.value, name: localizations.interest_received, color: CupertinoColors.systemBlue.highContrastColor, ), ], trackballBehavior: TrackballBehavior( enable: true, tooltipSettings: const InteractiveTooltip(enable: true), activationMode: ActivationMode.singleTap, hideDelay: 2000, ), ); } // Methode zur Erstellung der Daten für die untere Serie (Einzahlungen) List _getLowerChartData() { List chartData = []; for (int i = 0; i < lowerValues.length; i++) { chartData.add(SalesData(i + 1, lowerValues[i])); } return chartData; } // Methode zur Erstellung der Daten für die obere Serie (Zinsen) List _getUpperChartData() { List chartData = []; for (int i = 0; i < upperValues.length; i++) { chartData.add(SalesData(i + 1, upperValues[i])); } return chartData; } } // Klasse zur Modellierung der Datenpunkte im Diagramm class SalesData { final int year; // Jahr des Datenpunkts final double value; // Wert des Datenpunkts SalesData(this.year, this.value); }