flutter_application_1/lib/widgets/result_widget.dart

123 lines
5.1 KiB
Dart
Raw Normal View History

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\nPreis: 1329€', 'size': 20},
{'value': 3071, 'image': 'flyer-gotour6-model.png', 'text': 'Flyer Gotour6 3.40\nPreis: 3071€', 'size': 70},
{'value': 248157, 'image': 'porsche-model.png', 'text': 'Porsche 992 GT3 RS\nPreis: 248157€', 'size': 100},
{'value': 450000, 'image': 'real-estate-model.png', 'text': '150qm Einfamilienhaus\nPreis: 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,
),
),
],
);
}),
),
),
);
}