2024-05-06 17:28:10 +02:00
import ' package:flutter/cupertino.dart ' ;
import ' package:flutter_application_1/enums.dart ' ;
import ' package:flutter_application_1/translations.dart ' ;
import ' package:flutter_application_1/widgets/expandable_widget.dart ' ;
import ' package:flutter_application_1/widgets/chart_widget.dart ' ;
2024-05-10 13:37:09 +02:00
// Erstellt das Widget für das Ergebnis der Berechnungen
2024-05-06 17:28:10 +02:00
Widget buildResultWidget ( String compoundInterest , String investedMoney , String time , String monthlySavingsRate , String interestRate , PayoutInterval payoutInterval , List < double > investedMoneyList , List < double > compoundInterestList ) {
2024-05-10 13:37:09 +02:00
// Liste von Meilensteinen mit Werten, Bildern und Texten.
2024-05-06 17:28:10 +02:00
List < Map < String , dynamic > > milestoneList = [
{ ' value ' : 1329 , ' image ' : ' iphone-15-pro-model.png ' , ' text ' : ' iPhone 15 Pro Max \n Preis: 1329€ ' , ' size ' : 20 } ,
{ ' value ' : 3071 , ' image ' : ' flyer-gotour6-model.png ' , ' text ' : ' Flyer Gotour6 3.40 \n Preis: 3071€ ' , ' size ' : 70 } ,
{ ' value ' : 248157 , ' image ' : ' porsche-model.png ' , ' text ' : ' Porsche 992 GT3 RS \n Preis: 248157€ ' , ' size ' : 100 } ,
{ ' value ' : 450000 , ' image ' : ' real-estate-model.png ' , ' text ' : ' 150qm Einfamilienhaus \n Preis: ca. 450000€ ' , ' size ' : 100 } ,
] ;
return Column (
children: < Widget > [
_buildResultRow ( ' Endkapital: ' , ' $ compoundInterest € ' ) ,
_buildResultRow ( ' Gesamte Einzahlungen: ' , ' $ investedMoney € ' ) ,
_buildResultRow ( ' Erhaltene Zinszahlungen: ' , ' ${ double . parse ( compoundInterest ) - double . parse ( investedMoney ) } € ' ) ,
const SizedBox ( height: 20 ) ,
Text (
' Wenn du über einen Zeitraum von $ time Jahren ${ translateInterval ( payoutInterval ) } $ monthlySavingsRate € mit einem Zinssatz von $ interestRate % investierst, erreichst du am Ende ein Endkapital von $ compoundInterest €. Dieses setzt sich aus Einzahlungen von $ investedMoney € und Zinsen bzw. Kapitalerträgen in Höhe von ${ double . parse ( compoundInterest ) - double . parse ( investedMoney ) } € zusammen. '
) ,
const SizedBox ( height: 20 ) ,
ExpandableBox (
headerText: ' Grafik ' ,
expandedContent: StackedColumnChart (
lowerValues: investedMoneyList ,
upperValues: compoundInterestList ,
) ,
) ,
const SizedBox ( height: 5 ) ,
ExpandableBox (
headerText: ' Meilensteine ' ,
expandedContent: buildMilestoneTimeline ( milestoneList , double . parse ( compoundInterest ) - double . parse ( investedMoney ) ) ,
) ,
] ,
) ;
}
Widget _buildResultRow ( String label , String value ) {
return Padding (
padding: const EdgeInsets . symmetric ( horizontal: 100 ) ,
child: Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
Text (
label ,
style: const TextStyle (
fontWeight: FontWeight . bold ,
) ,
) ,
Text (
value ,
style: const TextStyle (
fontWeight: FontWeight . bold ,
) ,
) ,
] ,
) ,
) ;
}
2024-05-10 13:37:09 +02:00
// Erstellt die Meilenstein-Timeline.
2024-05-06 17:28:10 +02:00
Widget buildMilestoneTimeline ( List < Map < String , dynamic > > milestones , double totalInterest ) {
return SizedBox (
child: Center (
child: Column (
mainAxisAlignment: MainAxisAlignment . center ,
children: List . generate ( milestones . length , ( index ) {
2024-05-10 13:37:09 +02:00
// Werte aus dem Meilenstein-Objekt extrahieren
2024-05-06 17:28:10 +02:00
double milestoneValue = milestones [ index ] [ ' value ' ] ;
String milestoneImage = milestones [ index ] [ ' image ' ] ;
String milestoneText = milestones [ index ] [ ' text ' ] ;
double milestoneSize = milestones [ index ] [ ' size ' ] ;
bool milestoneReached = totalInterest > = milestoneValue ;
return Column (
children: [
2024-05-10 13:37:09 +02:00
if ( index < milestones . length & & index > 0 ) // Zeigt eine vertikale Linie an zwischen den Meilensteinen
2024-05-06 17:28:10 +02:00
Container (
height: 50 ,
width: 2 ,
color: milestoneReached ? CupertinoColors . systemGreen : CupertinoColors . black ,
) ,
Padding (
padding: const EdgeInsets . symmetric ( vertical: 4.0 ) ,
child: Column (
children: [
Image . asset (
' assets/images/ $ milestoneImage ' ,
width: milestoneSize ,
fit: BoxFit . cover ,
) ,
2024-05-10 13:37:09 +02:00
const SizedBox ( height: 5 ) ,
2024-05-06 17:28:10 +02:00
Text (
milestoneText ,
textAlign: TextAlign . center ,
style: const TextStyle (
fontWeight: FontWeight . bold ,
) ,
) ,
] ,
) ,
) ,
2024-05-10 13:37:09 +02:00
// Zeigt ein Häkchen oder einen Kreis je nach Erreichen des Meilensteins an
2024-05-06 17:28:10 +02:00
Padding (
padding: const EdgeInsets . symmetric ( vertical: 4.0 ) ,
child: Icon (
milestoneReached ? CupertinoIcons . check_mark_circled_solid : CupertinoIcons . circle_fill ,
size: 20 ,
color: milestoneReached ? CupertinoColors . systemGreen : CupertinoColors . black ,
) ,
) ,
] ,
) ;
} ) ,
) ,
) ,
) ;
}