import 'package:flutter/material.dart'; import 'package:fforte/l10n/app_localizations.dart'; class StreckeUSpurbedingungen extends StatefulWidget { final TextEditingController kmAutoController; final TextEditingController kmFussController; final TextEditingController kmRadController; final TextEditingController spGutController; final TextEditingController spMittelController; final TextEditingController spSchlechtController; const StreckeUSpurbedingungen( {required this.kmAutoController, required this.kmFussController, required this.kmRadController, required this.spGutController, required this.spMittelController, required this.spSchlechtController, super.key}); @override StreckeUSpurbedingungenState createState() => StreckeUSpurbedingungenState(); } class StreckeUSpurbedingungenState extends State { // vars for percent text fields String carPercent = "0"; String footPercent = "0"; String bikePercent = "0"; String goodPercent = "0"; String middlePercent = "0"; String badPercent = "0"; String totalKm = "0"; @override void initState() { super.initState(); // Travle Distance widget.kmAutoController.addListener(onDistanceTravledUpdated); widget.kmFussController.addListener(onDistanceTravledUpdated); widget.kmRadController.addListener(onDistanceTravledUpdated); // if one of the values is "" the excursion is edited for the first time. On which value i check here is unnecessarry if (widget.kmAutoController.text == "") { widget.kmAutoController.text = "0"; widget.kmFussController.text = "0"; widget.kmRadController.text = "0"; } // Track Conditions widget.spGutController.addListener(onTrackConditionsUpdated); widget.spMittelController.addListener(onTrackConditionsUpdated); widget.spSchlechtController.addListener(onTrackConditionsUpdated); // if one of the values is "" the excursion is edited for the first time. On which value i check here is unnecessarry if (widget.spGutController.text == "") { widget.spGutController.text = "0"; widget.spMittelController.text = "0"; widget.spSchlechtController.text = "0"; } } void onDistanceTravledUpdated() { try { double kmAuto = double.parse(widget.kmAutoController.text); double kmFuss = double.parse(widget.kmFussController.text); double kmRad = double.parse(widget.kmRadController.text); double gesKm = (kmAuto + kmFuss + kmRad); if (gesKm == 0) { carPercent = "0"; footPercent = "0"; bikePercent = "0"; } else { carPercent = (kmAuto / gesKm * 100).round().toString(); footPercent = (kmFuss / gesKm * 100).round().toString(); bikePercent = (kmRad / gesKm * 100).round().toString(); totalKm = gesKm.toString(); } setState(() {}); } catch (e) { return; } } void onTrackConditionsUpdated() { try { double kmGood = double.parse(widget.spGutController.text); double kmMiddle = double.parse(widget.spMittelController.text); double kmBad = double.parse(widget.spSchlechtController.text); double gesKm = (kmGood + kmMiddle + kmBad); if (gesKm == 0) { goodPercent = "0"; middlePercent = "0"; badPercent = "0"; } else { goodPercent = (kmGood / gesKm * 100).round().toString(); middlePercent = (kmMiddle / gesKm * 100).round().toString(); badPercent = (kmBad / gesKm * 100).round().toString(); } setState(() {}); } catch (e) { return; } } @override Widget build(BuildContext context) { return Column( children: [ Align( alignment: Alignment.bottomLeft, child: Text( AppLocalizations.of(context)!.zurueckgelegteStrecke, style: Theme.of(context).textTheme.titleMedium, )), Row( children: [ Expanded(child: Text(AppLocalizations.of(context)!.auto)), Expanded( child: TextField( keyboardType: TextInputType.number, controller: widget.kmAutoController, )), Expanded(child: Center(child: Text("="))), Expanded(child: Center(child: Text(carPercent))), Expanded(child: Center(child: Text("%"))), ], ), Row( children: [ Expanded(child: Text(AppLocalizations.of(context)!.zuFuss)), Expanded( child: TextField( keyboardType: TextInputType.number, controller: widget.kmFussController)), Expanded(child: Center(child: Text("="))), Expanded(child: Center(child: Text(footPercent))), Expanded(child: Center(child: Text("%"))), ], ), Row( children: [ Expanded(child: Text(AppLocalizations.of(context)!.fahrrad)), Expanded( child: TextField( keyboardType: TextInputType.number, controller: widget.kmRadController)), Expanded(child: Center(child: Text("="))), Expanded(child: Center(child: Text(bikePercent))), Expanded(child: Center(child: Text("%"))), ], ), const SizedBox( height: 20, ), Row( children: [ Expanded( flex: 1, child: Text(AppLocalizations.of(context)!.gesamt), ), Expanded( flex: 3, child: Align( alignment: Alignment.bottomLeft, child: Text(totalKm), ), ) ], ), const SizedBox( height: 20, ), Align( alignment: Alignment.bottomLeft, child: Text( AppLocalizations.of(context)!.spurbedingungen, style: Theme.of(context).textTheme.titleMedium, ), ), Row( children: [ Expanded(child: Text(AppLocalizations.of(context)!.gut)), Expanded( child: TextField( keyboardType: TextInputType.number, controller: widget.spGutController)), Expanded(child: Center(child: Text("="))), Expanded(child: Center(child: Text(goodPercent))), Expanded(child: Center(child: Text("%"))), ], ), Row( children: [ Expanded(child: Text(AppLocalizations.of(context)!.mittel)), Expanded( child: TextField( keyboardType: TextInputType.number, controller: widget.spMittelController)), Expanded(child: Center(child: Text("="))), Expanded(child: Center(child: Text(middlePercent))), Expanded(child: Center(child: Text("%"))), ], ), Row( children: [ Expanded(child: Text(AppLocalizations.of(context)!.schlecht)), Expanded( child: TextField( keyboardType: TextInputType.number, controller: widget.spSchlechtController, )), Expanded(child: Center(child: Text("="))), Expanded(child: Center(child: Text(badPercent))), Expanded(child: Center(child: Text("%"))), ], ), ], ); } }