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 = [
2024-05-20 16:34:31 +02:00
{ ' value ' : 1329.0 , ' emoji ' : ' 📱 ' , ' text ' : ' iPhone 15 Pro Max \n Preis: 1329€ ' } ,
{ ' value ' : 3071.0 , ' emoji ' : ' 🚲 ' , ' text ' : ' Flyer Gotour6 3.40 \n Preis: 3071€ ' } ,
{ ' value ' : 248157.0 , ' emoji ' : ' 🏎️ ' , ' text ' : ' Porsche 992 GT3 RS \n Preis: 248157€ ' } ,
{ ' value ' : 450000.0 , ' emoji ' : ' 🏡 ' , ' text ' : ' 150qm Einfamilienhaus \n Preis: ca. 450000€ ' } ,
2024-05-06 17:28:10 +02:00
] ;
return Column (
children: < Widget > [
2024-05-20 16:34:31 +02:00
_buildResultRow ( ' Endkapital: ' , ' $ compoundInterest € ' ) ,
_buildResultRow ( ' Einzahlungen: ' , ' $ investedMoney € ' ) ,
_buildResultRow ( ' Erhaltene Zinsen: ' , ' ${ double . parse ( compoundInterest ) - double . parse ( investedMoney ) } € ' ) ,
2024-05-06 17:28:10 +02:00
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 (
2024-05-20 16:34:31 +02:00
padding: const EdgeInsets . symmetric ( horizontal: 20 ) ,
2024-05-06 17:28:10 +02:00
child: Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
2024-05-20 16:34:31 +02:00
Flexible (
child: Text (
label ,
textAlign: TextAlign . start ,
style: const TextStyle (
fontWeight: FontWeight . bold ,
) ,
2024-05-06 17:28:10 +02:00
) ,
) ,
2024-05-20 16:34:31 +02:00
const SizedBox ( width: 20 ) ,
Flexible (
child: Text (
value ,
textAlign: TextAlign . end ,
style: const TextStyle (
fontWeight: FontWeight . bold ,
) ,
2024-05-06 17:28:10 +02:00
) ,
) ,
] ,
) ,
) ;
}
2024-05-20 16:34:31 +02:00
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 ' ] ;
2024-05-20 16:34:31 +02:00
String milestoneEmoji = milestones [ index ] [ ' emoji ' ] ;
2024-05-06 17:28:10 +02:00
String milestoneText = milestones [ index ] [ ' text ' ] ;
bool milestoneReached = totalInterest > = milestoneValue ;
return Column (
children: [
2024-05-20 16:34:31 +02:00
if ( 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: [
2024-05-20 16:34:31 +02:00
Text (
milestoneEmoji ,
style: const TextStyle ( fontSize: 25 ) ,
2024-05-06 17:28:10 +02:00
) ,
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 ,
) ,
) ,
] ,
) ;
} ) ,
) ,
) ,
) ;
}