From 02c0f134b5b2b33f0c515528797490b1df7b971d Mon Sep 17 00:00:00 2001 From: Nico Date: Wed, 7 May 2025 23:54:13 +0200 Subject: [PATCH] changed (hopefully) everything to new List with TextEditingControllers time --- lib/interfaces/i_db.dart | 8 +- lib/screens/addCam/add_cam_main.dart | 789 +++++++----------- lib/screens/helper/dialog_helper.dart | 6 +- lib/screens/sharedMethods/http_request.dart | 2 +- lib/screens/sharedMethods/save_file.dart | 2 +- .../sharedMethods/save_main_entry.dart | 4 +- lib/screens/sharedMethods/save_template.dart | 2 +- time.txt | 1 + 8 files changed, 325 insertions(+), 489 deletions(-) diff --git a/lib/interfaces/i_db.dart b/lib/interfaces/i_db.dart index e113031..385b37e 100644 --- a/lib/interfaces/i_db.dart +++ b/lib/interfaces/i_db.dart @@ -7,15 +7,15 @@ abstract interface class IDb { onCreateDatabases(Database excursionDB, int version); - Future addMainEntry(Map excursion); + Future addMainEntry(Map excursion); - Future updateMainEntry(Map excursion); + Future updateMainEntry(Map excursion); Future updateSent(int id); - Future addTemplate(Map templates); + Future addTemplate(Map templates); - Future updateTemplate(Map template); + Future updateTemplate(Map template); Future>> getAllMainEntries(); diff --git a/lib/screens/addCam/add_cam_main.dart b/lib/screens/addCam/add_cam_main.dart index d8957ff..d1f286e 100644 --- a/lib/screens/addCam/add_cam_main.dart +++ b/lib/screens/addCam/add_cam_main.dart @@ -1,14 +1,9 @@ -import 'dart:async'; import 'package:fforte/enums/databases.dart'; import 'package:fforte/screens/addCam/cam_widgets.dart'; -import 'package:fforte/screens/helper/dialog_helper.dart'; import 'package:fforte/screens/helper/snack_bar_helper.dart'; -import 'package:fforte/screens/sharedMethods/http_request.dart'; import 'package:fforte/screens/addCam/exceptions/location_disabled_exception.dart'; import 'package:fforte/screens/addCam/exceptions/location_forbidden_exception.dart'; import 'package:fforte/screens/addCam/services/geolocator_service.dart'; -import 'package:fforte/screens/sharedMethods/save_file.dart'; -import 'package:fforte/screens/sharedMethods/save_main_entry.dart'; import 'package:fforte/screens/sharedMethods/save_template.dart'; import 'package:fforte/screens/sharedWidgets/datum.dart'; import 'package:fforte/screens/sharedWidgets/var_text_field.dart'; @@ -22,7 +17,7 @@ class AddCamMain extends StatefulWidget { final bool isTemplate; final bool isFinished; final bool isSent; - final Map? existingData; + final Map? existingData; const AddCamMain( {super.key, @@ -40,28 +35,28 @@ class _AddCamMainState extends State { int currentStep = 0; // bool isTemplate = false; - TextEditingController cid = TextEditingController(); - TextEditingController rudelC = TextEditingController(); - TextEditingController adresse1C = TextEditingController(); - TextEditingController adresse2C = TextEditingController(); - TextEditingController adresse3C = TextEditingController(); - TextEditingController bLandC = TextEditingController(); - TextEditingController lkrC = TextEditingController(); - TextEditingController beiOrtC = TextEditingController(); - TextEditingController ortInfoC = TextEditingController(); - TextEditingController ffTypC = TextEditingController(); - TextEditingController kSchloNrC = TextEditingController(); - TextEditingController auftragC = TextEditingController(); - TextEditingController kontAbspC = TextEditingController(); - TextEditingController sonstBemC = TextEditingController(); - TextEditingController fKontakt1C = TextEditingController(); - TextEditingController fKontakt2C = TextEditingController(); - TextEditingController fKontakt3C = TextEditingController(); - TextEditingController standortC = TextEditingController(); - TextEditingController kTage1C = TextEditingController(); - TextEditingController kTage2C = TextEditingController(); - TextEditingController intKommC = TextEditingController(); - TextEditingController betreuungC = TextEditingController(); + // TextEditingController cid = TextEditingController(); + // TextEditingController rudelC = TextEditingController(); + // TextEditingController adresse1C = TextEditingController(); + // TextEditingController adresse2C = TextEditingController(); + // TextEditingController adresse3C = TextEditingController(); + // TextEditingController bLandC = TextEditingController(); + // TextEditingController lkrC = TextEditingController(); + // TextEditingController beiOrtC = TextEditingController(); + // TextEditingController ortInfoC = TextEditingController(); + // TextEditingController ffTypC = TextEditingController(); + // TextEditingController kSchloNrC = TextEditingController(); + // TextEditingController auftragC = TextEditingController(); + // TextEditingController kontAbspC = TextEditingController(); + // TextEditingController sonstBemC = TextEditingController(); + // TextEditingController fKontakt1C = TextEditingController(); + // TextEditingController fKontakt2C = TextEditingController(); + // TextEditingController fKontakt3C = TextEditingController(); + // TextEditingController standortC = TextEditingController(); + // TextEditingController kTage1C = TextEditingController(); + // TextEditingController kTage2C = TextEditingController(); + // TextEditingController intKommC = TextEditingController(); + // TextEditingController betreuungC = TextEditingController(); String selectedStatus = 'aktiv'; String selectedFotoFilm = 'Foto'; @@ -85,79 +80,105 @@ class _AddCamMainState extends State { DateTime? kontDat = DateTime.now(); DateTime? protoAm = DateTime.now(); - Map getPlace() { - Map place = { - 'ID': widget.existingData?['ID'], - 'CID': cid.text, - 'Rudel': rudelC.text, - 'Datum': datum.toString().split(" ").first, - 'Adresse1': adresse1C.text, - 'Adresse2': adresse2C.text, - 'Adresse3': adresse3C.text, - 'BLand': bLandC.text, - 'Lkr': lkrC.text, - 'BeiOrt': beiOrtC.text, - 'OrtInfo': ortInfoC.text, - 'Status': selectedStatus, - 'FFTyp': ffTypC.text, - 'FotoFilm': selectedFotoFilm, - 'MEZ': selectedMEZ, - 'Platzung': selectedPlatzung, - 'KSchloNr': kSchloNrC.text, - 'KontDat': kontDat.toString().split(" ").first, - 'AbbauDat': abbauDat.toString().split(" ").first.replaceAll("null", ""), - 'Auftrag': auftragC.text, - 'KontAbsp': kontAbspC.text, - 'SonstBem': sonstBemC.text, - 'FKontakt1': fKontakt1C.text, - 'FKontakt2': fKontakt2C.text, - 'FKontakt3': fKontakt3C.text, - 'Standort': standortC.text, - 'KTage1': kTage1C.text, - 'KTage2': kTage2C.text, - 'ProtoAm': protoAm.toString().split(" ").first, - 'IntKomm': intKommC.text, - 'Betreuung': betreuungC.text, - 'DECLNG': currentPosition.longitude, - 'DECLAT': currentPosition.latitude, - }; + Map getFieldsController() { + Map rmap = { + // Step 1 + "Status": TextEditingController(), + "Betreuung": TextEditingController(), + "Standort": TextEditingController(), + "CID": TextEditingController(), + "FFTyp": TextEditingController(), + "Mez": TextEditingController(), + "KSchloNr": TextEditingController(), + "Rudel": TextEditingController(), - return place; + // Step 2 + "OrtInfo": TextEditingController(), + "BeiOrt": TextEditingController(), + "Bland": TextEditingController(), + "Lkr": TextEditingController(), + "Platzung": TextEditingController(), + + // Step 3 + "DECLNG": TextEditingController(), + "DECLAT": TextEditingController(), + "Datum": TextEditingController(), + "KontDat": TextEditingController(), + "KTage1": TextEditingController(), + "KTage2": TextEditingController(), + "AbbauDat": TextEditingController(), + "Auftrag": TextEditingController(), + "KontAbsp": TextEditingController(), + "SonstBem": TextEditingController(), + + // Step 4 + "Adresse1": TextEditingController(), + "Adresse2": TextEditingController(), + "Adresse3": TextEditingController(), + "FKontakt1": TextEditingController(), + "FKontakt2": TextEditingController(), + "FKontakt3": TextEditingController(), + "IntKomm": TextEditingController(), + + // Gone? + "ProtoAm": TextEditingController(), + "FotoFilm": TextEditingController(), + }; + return rmap; } - bool empty = false; + Map getFieldsText() { + Map rmap = {}; - // determine live position with checks for denied permission and turned off location service - // Future _deteterminePosition() async { - // bool locationEnabled; - // LocationPermission permissionGiven; + for (var itemKey in getFieldsController().keys) { + rmap[itemKey] = getFieldsController()["key"]!.text; + } + + return rmap; + } + + // Map getPlace() { + // Map place = { + // 'ID': widget.existingData?['ID'], + // 'CID': cid.text, + // 'Rudel': rudelC.text, + // 'Datum': datum.toString().split(" ").first, + // 'Adresse1': adresse1C.text, + // 'Adresse2': adresse2C.text, + // 'Adresse3': adresse3C.text, + // 'BLand': bLandC.text, + // 'Lkr': lkrC.text, + // 'BeiOrt': beiOrtC.text, + // 'OrtInfo': ortInfoC.text, + // 'Status': selectedStatus, + // 'FFTyp': ffTypC.text, + // 'FotoFilm': selectedFotoFilm, + // 'MEZ': selectedMEZ, + // 'Platzung': selectedPlatzung, + // 'KSchloNr': kSchloNrC.text, + // 'KontDat': kontDat.toString().split(" ").first, + // 'AbbauDat': abbauDat.toString().split(" ").first.replaceAll("null", ""), + // 'Auftrag': auftragC.text, + // 'KontAbsp': kontAbspC.text, + // 'SonstBem': sonstBemC.text, + // 'FKontakt1': fKontakt1C.text, + // 'FKontakt2': fKontakt2C.text, + // 'FKontakt3': fKontakt3C.text, + // 'Standort': standortC.text, + // 'KTage1': kTage1C.text, + // 'KTage2': kTage2C.text, + // 'ProtoAm': protoAm.toString().split(" ").first, + // 'IntKomm': intKommC.text, + // 'Betreuung': betreuungC.text, + // 'DECLNG': currentPosition.longitude, + // 'DECLAT': currentPosition.latitude, + // }; // - // locationEnabled = await Geolocator.isLocationServiceEnabled(); - // if (!locationEnabled && mounted) { - // ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // content: Text(AppLocalizations.of(context)!.locationDisabled))); - // return currentPosition; - // } - // - // permissionGiven = await Geolocator.checkPermission(); - // if (permissionGiven == LocationPermission.denied) { - // permissionGiven = await Geolocator.requestPermission(); - // if (permissionGiven == LocationPermission.denied && mounted) { - // ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // content: Text(AppLocalizations.of(context)!.locationForbidden))); - // - // return currentPosition; - // } - // } - // - // if (permissionGiven == LocationPermission.deniedForever && mounted) { - // ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // content: Text(AppLocalizations.of(context)!.locationForbidden))); - // return currentPosition; - // } - // return currentPosition = await Geolocator.getCurrentPosition(); + // return place; // } + bool empty = false; + @override void initState() { super.initState(); @@ -167,319 +188,90 @@ class _AddCamMainState extends State { GeolocatorService.deteterminePosition() .then((result) => currentPosition = result); } on LocationDisabledException { - SnackBarHelper.showSnackBarMessage(context, AppLocalizations.of(context)!.locationDisabled); + SnackBarHelper.showSnackBarMessage( + context, AppLocalizations.of(context)!.locationDisabled); } on LocationForbiddenException { - SnackBarHelper.showSnackBarMessage(context, AppLocalizations.of(context)!.locationForbidden); + SnackBarHelper.showSnackBarMessage( + context, AppLocalizations.of(context)!.locationForbidden); } - + // TODO ADD THIS AGAIN BUT RIGHT // If a template is edited this fills in the existing values - if (widget.isTemplate || widget.isFinished && widget.existingData != null) { - cid.text = widget.existingData!['CID'] ?? ""; - rudelC.text = widget.existingData!['Rudel'] ?? ""; - adresse1C.text = widget.existingData!['Adresse1'] ?? ""; - adresse2C.text = widget.existingData!['Adresse2'] ?? ""; - adresse3C.text = widget.existingData!['Adresse3'] ?? ""; - bLandC.text = widget.existingData!['BLand'] ?? ""; - lkrC.text = widget.existingData!['Lkr'] ?? ""; - beiOrtC.text = widget.existingData!['BeiOrt'] ?? ""; - ortInfoC.text = widget.existingData!['OrtInfo'] ?? ""; - selectedStatus = widget.existingData!['Status'] ?? ""; - ffTypC.text = widget.existingData!['FFTyp'] ?? ""; - selectedFotoFilm = widget.existingData!['FotoFilm'] ?? ""; - selectedMEZ = widget.existingData!['MEZ'] ?? ""; - selectedPlatzung = widget.existingData!['Platzung'] ?? ""; - kSchloNrC.text = widget.existingData!['KSchloNr'] ?? ""; - datum = DateTime.parse(widget.existingData!['Datum']); - kontDat = widget.existingData!['KontDat'] == "" - ? null - : DateTime.parse(widget.existingData!['KontDat']); - abbauDat = widget.existingData!['AbbauDat'] == "" - ? null - : DateTime.parse(widget.existingData!['AbbauDat']); - auftragC.text = widget.existingData!['Auftrag'] ?? ""; - kontAbspC.text = widget.existingData!['KontAbsp'] ?? ""; - sonstBemC.text = widget.existingData!['SonstBem'] ?? ""; - fKontakt1C.text = widget.existingData!['FKontakt1'] ?? ""; - fKontakt2C.text = widget.existingData!['FKontakt2'] ?? ""; - fKontakt3C.text = widget.existingData!['FKontakt3'] ?? ""; - standortC.text = widget.existingData!['Standort'] ?? ""; - kTage1C.text = widget.existingData!['KTage1'].toString(); - kTage2C.text = widget.existingData!['KTage2'].toString(); - protoAm = widget.existingData!['ProtoAm'] == null - ? null - : DateTime.parse(widget.existingData!['ProtoAm']); - intKommC.text = widget.existingData!['IntKomm'] ?? ""; - betreuungC.text = widget.existingData!['Betreuung'] ?? ""; - } + // if (widget.isTemplate || widget.isFinished && widget.existingData != null) { + // cid.text = widget.existingData!['CID'] ?? ""; + // rudelC.text = widget.existingData!['Rudel'] ?? ""; + // adresse1C.text = widget.existingData!['Adresse1'] ?? ""; + // adresse2C.text = widget.existingData!['Adresse2'] ?? ""; + // adresse3C.text = widget.existingData!['Adresse3'] ?? ""; + // bLandC.text = widget.existingData!['BLand'] ?? ""; + // lkrC.text = widget.existingData!['Lkr'] ?? ""; + // beiOrtC.text = widget.existingData!['BeiOrt'] ?? ""; + // ortInfoC.text = widget.existingData!['OrtInfo'] ?? ""; + // selectedStatus = widget.existingData!['Status'] ?? ""; + // ffTypC.text = widget.existingData!['FFTyp'] ?? ""; + // selectedFotoFilm = widget.existingData!['FotoFilm'] ?? ""; + // selectedMEZ = widget.existingData!['MEZ'] ?? ""; + // selectedPlatzung = widget.existingData!['Platzung'] ?? ""; + // kSchloNrC.text = widget.existingData!['KSchloNr'] ?? ""; + // datum = DateTime.parse(widget.existingData!['Datum']); + // kontDat = widget.existingData!['KontDat'] == "" + // ? null + // : DateTime.parse(widget.existingData!['KontDat']); + // abbauDat = widget.existingData!['AbbauDat'] == "" + // ? null + // : DateTime.parse(widget.existingData!['AbbauDat']); + // auftragC.text = widget.existingData!['Auftrag'] ?? ""; + // kontAbspC.text = widget.existingData!['KontAbsp'] ?? ""; + // sonstBemC.text = widget.existingData!['SonstBem'] ?? ""; + // fKontakt1C.text = widget.existingData!['FKontakt1'] ?? ""; + // fKontakt2C.text = widget.existingData!['FKontakt2'] ?? ""; + // fKontakt3C.text = widget.existingData!['FKontakt3'] ?? ""; + // standortC.text = widget.existingData!['Standort'] ?? ""; + // kTage1C.text = widget.existingData!['KTage1'].toString(); + // kTage2C.text = widget.existingData!['KTage2'].toString(); + // protoAm = widget.existingData!['ProtoAm'] == null + // ? null + // : DateTime.parse(widget.existingData!['ProtoAm']); + // intKommC.text = widget.existingData!['IntKomm'] ?? ""; + // betreuungC.text = widget.existingData!['Betreuung'] ?? ""; + // } } - // void showSnackBarMessage(String message) { - // ScaffoldMessenger.of(context) - // .showSnackBar(SnackBar(content: Text(message))); - // } - - // Function to show the dialog where the user has to choose if he want to safe his values as a template - // Future showTemplateDialog(List emptyField) async { - // return showDialog( - // context: context, - // barrierDismissible: false, - // builder: (BuildContext context) { - // return AlertDialog( - // title: Text(AppLocalizations.of(context)!.fieldEmpty), - // content: SingleChildScrollView( - // child: ListBody(children: [Text(emptyField.join("; "))]), - // ), - // actions: [ - // TextButton( - // onPressed: () { - // Navigator.of(context).pop(); - // }, - // child: Text(AppLocalizations.of(context)!.cancel)), - // TextButton( - // onPressed: () { - // saveTemplate( - // getPlace(), DatabasesEnum.place, widget.isTemplate); - // Navigator.pushNamedAndRemoveUntil( - // context, '/home', (route) => false); - // }, - // child: Text(AppLocalizations.of(context)!.template)) - // ], - // ); - // }); - // } - - // Future _showServerErrorDialog() { - // bool isLoading = false; - // - // return showDialog( - // context: context, - // builder: (context) { - // return StatefulBuilder( - // builder: (BuildContext context, StateSetter setState) { - // return AlertDialog( - // title: Text(AppLocalizations.of(context)!.servererrortitle), - // content: isLoading - // ? const SizedBox( - // height: 100, - // child: Center(child: CircularProgressIndicator())) - // : null, - // actions: [ - // if (!isLoading) - // TextButton( - // onPressed: () async { - // setState(() => isLoading = true); - // int errorCode = await HttpRequest.httpRequest(saveDataMap: getPlace()); - // setState(() => isLoading = false); - // - // if (errorCode != 201 && context.mounted) { - // _showServerErrorDialog(); - // } else { - // if (context.mounted) Navigator.pop(context); - // // saveData(true); - // SaveMainEntryMethod.saveEntry(entryData: getPlace(), isTemplate: widget.isTemplate); - // _showSuccessDialog(); - // } - // }, - // child: Text(AppLocalizations.of(context)!.sendagain)), - // if (!isLoading) - // TextButton( - // onPressed: () { - // Navigator.pop(context); - // }, - // child: Text(AppLocalizations.of(context)!.cancel)) - // ], - // ); - // }, - // ); - // }); - // } - - // Future showSaveOptionsDialog() async { - // bool isLoading = false; - // - // return showDialog( - // context: context, - // barrierDismissible: - // false, // Verhindert das Schließen des Dialogs durch den Benutzer - // builder: (BuildContext context) { - // return StatefulBuilder( - // builder: (context, setState) { - // return AlertDialog( - // title: isLoading - // ? Text(AppLocalizations.of(context)!.loading) - // : Text(AppLocalizations.of(context)!.savemethod), - // content: isLoading - // ? const SizedBox( - // height: 100, - // child: Center(child: CircularProgressIndicator())) - // : null, - // actions: [ - // if (!isLoading) - // TextButton( - // onPressed: () async { - // setState(() => isLoading = true); - // saveTemplate(getPlace(), DatabasesEnum.place, - // widget.isTemplate); - // Navigator.pushNamedAndRemoveUntil( - // context, '/home', (route) => false); - // }, - // child: Text(AppLocalizations.of(context)!.template)), - // if (!isLoading) - // TextButton( - // onPressed: () async { - // setState(() => isLoading = true); - // int errorCode = await HttpRequest.httpRequest(saveDataMap: getPlace()); - // setState(() => isLoading = false); - // - // if (errorCode != 201 || !context.mounted) { - // SaveMainEntryMethod.saveEntry(entryData: getPlace(), isTemplate: widget.isTemplate); - // if (context.mounted) DialogHelper.showServerErrorDialog(context, getPlace(), widget.isTemplate); - // } else { - // SaveMainEntryMethod.saveEntry(entryData: getPlace(), isTemplate: widget.isTemplate, sent: true); - // _showSuccessDialog(); - // } - // }, - // child: - // Text(AppLocalizations.of(context)!.sendtoserver)), - // if (!isLoading) - // TextButton( - // onPressed: () async { - // setState(() => isLoading = true); - // SaveMainEntryMethod.saveEntry(entryData: getPlace(), isTemplate: widget.isTemplate); - // _saveFile(); - // setState(() => isLoading = false); - // }, - // child: Text(AppLocalizations.of(context)!.saveasfile)), - // if (!isLoading) - // TextButton( - // onPressed: () { - // SaveMainEntryMethod.saveEntry(entryData: getPlace(), isTemplate: widget.isTemplate); - // Navigator.pushNamedAndRemoveUntil( - // context, '/home', (route) => false); - // }, - // child: Text(AppLocalizations.of(context)!.justsave)), - // if (!isLoading) - // TextButton( - // onPressed: () { - // Navigator.pop(context); - // }, - // child: Text(AppLocalizations.of(context)!.cancel)), - // ], - // ); - // }, - // ); - // }); - // } - - // Future _showSuccessDialog() async { - // return showDialog( - // context: context, - // builder: (context) { - // return AlertDialog( - // title: Text(AppLocalizations.of(context)!.successful), - // actions: [ - // TextButton( - // onPressed: () { - // Navigator.pushNamedAndRemoveUntil( - // context, '/home', (route) => false); - // }, - // child: Text(AppLocalizations.of(context)!.continueB)) - // ], - // ); - // }); - // } - - // Future _httpRequest() async { - // Map place = getPlace(); - // - // HttpRequest method = HttpRequest(); - // - // await method.httpRequest(jsonEncode(place)); - // - // return method.errorCode; - // } - - // void _saveFile() { - // try { - // SaveMainEntryMethod.saveEntry( - // getPlace(), AppLocalizations.of(context)!.justplace, standortC.text); - // // TODO change to fileSaved. Also in SaveFileMethod class - // SnackBarHelper.showSnackBarMessage(context, AppLocalizations.of(context)!.savefilefailed); - // Navigator.pushNamedAndRemoveUntil(context, '/home', (route) => false); - // } catch (e) { - // SnackBarHelper.showSnackBarMessage(context, AppLocalizations.of(context)!.savefilefailed); - // } - // } - // checks if required fields are not empty. If one is the name will be returned // TODO rewrite - List validateData() { - List emptyFields = []; - - Map fields = { - AppLocalizations.of(context)!.camLink: cid, - AppLocalizations.of(context)!.rudel: rudelC, - AppLocalizations.of(context)!.adresse1: adresse1C, - AppLocalizations.of(context)!.bland: bLandC, - AppLocalizations.of(context)!.lkr: lkrC, - AppLocalizations.of(context)!.beiort: beiOrtC, - AppLocalizations.of(context)!.status: - TextEditingController(text: selectedStatus), - AppLocalizations.of(context)!.fftyp: ffTypC, - "${AppLocalizations.of(context)!.foto} / ${AppLocalizations.of(context)!.filelocation}": - TextEditingController(text: selectedFotoFilm), - AppLocalizations.of(context)!.zeiteinstellung: - TextEditingController(text: selectedMEZ), - AppLocalizations.of(context)!.platzung: - TextEditingController(text: selectedPlatzung), - AppLocalizations.of(context)!.ktage1: kTage1C, - AppLocalizations.of(context)!.ktage1: kTage2C, - AppLocalizations.of(context)!.location: standortC, - }; - - for (var entry in fields.entries) { - if (entry.value.text.isEmpty) { - emptyFields.add(entry.key); - } - } - - empty = false; - if (emptyFields.isNotEmpty) empty = true; - - return emptyFields; - } - - // If the user decides to safe his values as a template this function is called to save the values in the database - // If the user already edits a template this template will be upadted otherwise a new one will be created - // void saveTemplate() async { - // var placeDB = PlaceDBHelper(); + // List validateData() { + // List emptyFields = []; // - // Map templates = getPlace(); + // Map fields = { + // AppLocalizations.of(context)!.camLink: cid, + // AppLocalizations.of(context)!.rudel: rudelC, + // AppLocalizations.of(context)!.adresse1: adresse1C, + // AppLocalizations.of(context)!.bland: bLandC, + // AppLocalizations.of(context)!.lkr: lkrC, + // AppLocalizations.of(context)!.beiort: beiOrtC, + // AppLocalizations.of(context)!.status: + // TextEditingController(text: selectedStatus), + // AppLocalizations.of(context)!.fftyp: ffTypC, + // "${AppLocalizations.of(context)!.foto} / ${AppLocalizations.of(context)!.filelocation}": + // TextEditingController(text: selectedFotoFilm), + // AppLocalizations.of(context)!.zeiteinstellung: + // TextEditingController(text: selectedMEZ), + // AppLocalizations.of(context)!.platzung: + // TextEditingController(text: selectedPlatzung), + // AppLocalizations.of(context)!.ktage1: kTage1C, + // AppLocalizations.of(context)!.ktage1: kTage2C, + // AppLocalizations.of(context)!.location: standortC, + // }; // - // if (widget.isTemplate) { - // await placeDB.updateTemplate(templates); - // } else { - // await placeDB.addTemplate(templates); - // } - // } - - // TODO FINISHED HERE - // If the user has filled all needed values this function will be called to safe them in the database - // * also creates a json string to send it to the server later - // void saveData([bool sent = false]) async { - // var placeDB = PlaceDBHelper(); - // Map place = getPlace(); - // - // // Get the ID of the newly added or updated place - // int newPlaceId = await placeDB.addMainEntry(place); - // - // if (sent == true) { - // placeDB.updateSent(newPlaceId); // Update 'Sent' using the correct ID + // for (var entry in fields.entries) { + // if (entry.value.text.isEmpty) { + // emptyFields.add(entry.key); + // } // } // - // if (widget.isTemplate) { - // await placeDB.deleteTemplateById(cid.text); - // } + // empty = false; + // if (emptyFields.isNotEmpty) empty = true; + // + // return emptyFields; // } // The widget tree which gets the shown widget from the ./cam_widgets.dart file @@ -498,7 +290,7 @@ class _AddCamMainState extends State { child: VarTextField( required: true, dbName: "Standort", - textController: standortC, + textController: getFieldsController()["Standort"]!, localization: AppLocalizations.of(context)!.altstort, dbDesignation: DatabasesEnum.place, ), @@ -506,6 +298,7 @@ class _AddCamMainState extends State { const SizedBox( height: 5, ), + // -------------------- Align( alignment: Alignment.bottomLeft, child: Row( @@ -521,12 +314,13 @@ class _AddCamMainState extends State { initialStatus: selectedStatus, onStatusChanged: (status) { setState(() { - selectedStatus = status; + getFieldsController()["Status"]!.text = status; }); }, ), + // -------------------- VarTextField( - textController: betreuungC, + textController: getFieldsController()["Betreuung"]!, localization: AppLocalizations.of(context)!.betreuung, dbName: "Betreuung", required: false, @@ -535,15 +329,17 @@ class _AddCamMainState extends State { const SizedBox( height: 20, ), + // -------------------- VarTextField( - textController: cid, + textController: getFieldsController()["CID"]!, localization: AppLocalizations.of(context)!.camLink, dbName: "CID", required: true, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: ffTypC, + textController: getFieldsController()["FFTyp"]!, localization: AppLocalizations.of(context)!.fftyp, dbName: "FFTyp", required: true, @@ -552,6 +348,7 @@ class _AddCamMainState extends State { const SizedBox( height: 15, ), + // -------------------- Align( alignment: Alignment.bottomLeft, child: Row( @@ -568,14 +365,16 @@ class _AddCamMainState extends State { onMEZChanged: (mez) { setState(() { selectedMEZ = mez; + getFieldsController()["Mez"]!.text = mez; }); }, ), const SizedBox( height: 15, ), + // -------------------- VarTextField( - textController: kSchloNrC, + textController: getFieldsController()["KSchloNr"]!, localization: AppLocalizations.of(context)!.kschlonr, dbName: "KSchloNr", required: false, @@ -584,8 +383,9 @@ class _AddCamMainState extends State { const SizedBox( height: 5, ), + // -------------------- VarTextField( - textController: rudelC, + textController: getFieldsController()["Rudel"]!, localization: AppLocalizations.of(context)!.rudel, dbName: "Rudel", required: true, @@ -603,6 +403,7 @@ class _AddCamMainState extends State { content: Column( children: [ Row( + // TODO MAYBE FIX children: [ Column( children: [ @@ -619,12 +420,16 @@ class _AddCamMainState extends State { .push( MaterialPageRoute(builder: (context) { return Karte( - ortInfoC: ortInfoC, - beiOrtC: beiOrtC, + ortInfoC: getFieldsController()["OrtInfo"]!, + beiOrtC: getFieldsController()["BeiOrt"]!, currentPosition: currentPosition, onPositionChange: (updatedPosition) { setState(() { currentPosition = updatedPosition; + getFieldsController()["DECLNG"]!.text = + updatedPosition.longitude.toString(); + getFieldsController()["DECLAT"]!.text = + updatedPosition.latitude.toString(); }); }, ); @@ -649,30 +454,34 @@ class _AddCamMainState extends State { child: Text(AppLocalizations.of(context)!.openMap)), ], ), + // -------------------- VarTextField( - textController: bLandC, + textController: getFieldsController()["Bland"]!, localization: AppLocalizations.of(context)!.bland, dbName: "BLand", required: true, dbDesignation: DatabasesEnum.place, defaultValue: "bLand", ), + // -------------------- VarTextField( - textController: lkrC, + textController: getFieldsController()["Lkr"]!, localization: AppLocalizations.of(context)!.lkr, dbName: "Lkr", required: true, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: beiOrtC, + textController: getFieldsController()["BeiOrt"]!, localization: AppLocalizations.of(context)!.beiort, dbName: "BeiOrt", required: true, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: ortInfoC, + textController: getFieldsController()["OrtInfo"]!, localization: AppLocalizations.of(context)!.ortinfo, dbName: "OrtInfo", required: false, @@ -681,6 +490,7 @@ class _AddCamMainState extends State { const SizedBox( height: 15, ), + // -------------------- Align( alignment: Alignment.bottomLeft, child: Row( @@ -697,6 +507,7 @@ class _AddCamMainState extends State { onPlatzungChanged: (platzung) { setState(() { selectedPlatzung = platzung; + getFieldsController()["Platzung"]!.text = platzung; }); }, ), @@ -711,20 +522,26 @@ class _AddCamMainState extends State { initDatum: datum, onDateChanged: (value) { datum = value; + getFieldsController()["Datum"]!.text = + value.toString().split(" ").first; }, name: AppLocalizations.of(context)!.pickDate, ), + // -------------------- KontDat( initKontDat: kontDat, onDateChanged: (value) { setState(() { kontDat = value; + getFieldsController()["KontDat"]!.text = + value.toString().split(" ").first; }); }, ), const SizedBox( height: 20, ), + // -------------------- Align( alignment: Alignment.bottomLeft, child: Row( @@ -748,7 +565,7 @@ class _AddCamMainState extends State { flex: 4, child: VarTextField( otherDefault: "24", - textController: kTage1C, + textController: getFieldsController()["KTage1"]!, localization: AppLocalizations.of(context)!.ktage1, dbName: "KTage1", required: true, @@ -767,7 +584,7 @@ class _AddCamMainState extends State { flex: 4, child: VarTextField( otherDefault: "48", - textController: kTage2C, + textController: getFieldsController()["KTage2"]!, localization: AppLocalizations.of(context)!.ktage2, dbName: "KTage2", required: true, @@ -778,12 +595,15 @@ class _AddCamMainState extends State { const SizedBox( height: 20, ), + // -------------------- Row( children: [ AbbauDat( initAbbauDat: abbauDat, onDateChanged: (value) { abbauDat = value; + getFieldsController()["AbbauDat"]!.text = + value.toString().split(" ").first; }, ), ], @@ -791,22 +611,25 @@ class _AddCamMainState extends State { const SizedBox( height: 20, ), + // -------------------- VarTextField( - textController: auftragC, + textController: getFieldsController()["Auftrag"]!, localization: AppLocalizations.of(context)!.auftrag, dbName: "Auftrag", required: false, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: kontAbspC, + textController: getFieldsController()["KontAbsp"]!, localization: AppLocalizations.of(context)!.kontabsp, dbName: "KontAbsp", required: false, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: sonstBemC, + textController: getFieldsController()["SonstBem"]!, localization: AppLocalizations.of(context)!.sonstbemerkungen, dbName: "SonstBem", @@ -820,53 +643,59 @@ class _AddCamMainState extends State { content: Column( children: [ VarTextField( - textController: adresse1C, + textController: getFieldsController()["Adresse1"]!, localization: AppLocalizations.of(context)!.adresse1, dbName: "Adresse1", dbDesignation: DatabasesEnum.place, required: true, defaultValue: "addresse1", ), + // -------------------- VarTextField( - textController: adresse2C, + textController: getFieldsController()["Adresse2"]!, localization: AppLocalizations.of(context)!.adresse2, dbName: "Adresse2", required: false, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: adresse3C, + textController: getFieldsController()["Adresse3"]!, localization: AppLocalizations.of(context)!.adresse3, - dbName: "Adresse2", + dbName: "Adresse3", required: false, dbDesignation: DatabasesEnum.place, ), const SizedBox( height: 15, ), + // -------------------- VarTextField( - textController: fKontakt1C, + textController: getFieldsController()["FKontakt1"]!, localization: AppLocalizations.of(context)!.fkontakt1, dbName: "FKontakt1", required: false, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: fKontakt2C, + textController: getFieldsController()["FKontakt2"]!, localization: AppLocalizations.of(context)!.fkontakt2, dbName: "FKontakt2", required: false, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: fKontakt3C, + textController: getFieldsController()["FKontakt3"]!, localization: AppLocalizations.of(context)!.fkontakt3, dbName: "FKontakt3", required: false, dbDesignation: DatabasesEnum.place, ), + // -------------------- VarTextField( - textController: intKommC, + textController: getFieldsController()["IntKomm"]!, localization: AppLocalizations.of(context)!.intkomm, dbName: "IntKomm", required: false, @@ -878,62 +707,68 @@ class _AddCamMainState extends State { // Here the site is built with the steps from above return Scaffold( - appBar: AppBar(title: Text(AppLocalizations.of(context)!.addplace)), - body: PageTransitionSwitcher( - duration: const Duration(milliseconds: 800), - transitionBuilder: (Widget child, Animation animation, - Animation secondaryAnimation) { - return SharedAxisTransition( - animation: animation, - secondaryAnimation: secondaryAnimation, - transitionType: SharedAxisTransitionType.vertical, - child: child, - ); - }, - child: Stepper( - key: ValueKey(currentStep), - type: StepperType.vertical, - steps: getSteps(), + appBar: AppBar(title: Text(AppLocalizations.of(context)!.addplace)), + body: PageTransitionSwitcher( + duration: const Duration(milliseconds: 800), + transitionBuilder: (Widget child, Animation animation, + Animation secondaryAnimation) { + return SharedAxisTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + transitionType: SharedAxisTransitionType.vertical, + child: child, + ); + }, + child: Stepper( + key: ValueKey(currentStep), + type: StepperType.vertical, + steps: getSteps(), - // Functions that handle the navigation through the steps - currentStep: currentStep, - onStepTapped: (value) { - setState(() { - currentStep = value; - }); - }, - onStepContinue: () async { - final isLastStep = currentStep == getSteps().length - 1; + // Functions that handle the navigation through the steps + currentStep: currentStep, + onStepTapped: (value) { + setState(() { + currentStep = value; + }); + }, + onStepContinue: () async { + final isLastStep = currentStep == getSteps().length - 1; - if (!isLastStep) { - saveTemplate( - getPlace(), DatabasesEnum.place, widget.isTemplate); - setState(() { - currentStep += 1; - }); - } else { - List emptyFields = validateData(); - // ! always filled out - // empty = false; - if (widget.isSent) { - Navigator.pushNamedAndRemoveUntil( - context, '/home', (route) => false); - } else if (empty == true) { - DialogHelper.showTemplateDialog(context, emptyFields, getPlace() ); - return; - } else if (empty == false) { - await DialogHelper.showSaveOptionsDialog(context, getPlace(), widget.isTemplate); - } - } - }, - onStepCancel: () { - if (currentStep == 0) { - Navigator.pop(context); - } else { - setState(() { - currentStep -= 1; - }); - } - }))); + if (!isLastStep) { + saveTemplate(getFieldsText(), DatabasesEnum.place, + widget.isTemplate); + setState(() { + currentStep += 1; + }); + } else { + // TODO implement validateData again + // List emptyFields = validateData(); + // ! always filled out + // empty = false; + // if (widget.isSent) { + // Navigator.pushNamedAndRemoveUntil( + // context, '/home', (route) => false); + // } else if (empty == true) { + // DialogHelper.showTemplateDialog( + // context, emptyFields, getFieldsText(); + // return; + // } else if (empty == false) { + // await DialogHelper.showSaveOptionsDialog( + // context, getFieldsText(), widget.isTemplate); + // } + } + }, + onStepCancel: () { + if (currentStep == 0) { + Navigator.pop(context); + } else { + setState(() { + currentStep -= 1; + }); + } + }, + ), + ), + ); } } diff --git a/lib/screens/helper/dialog_helper.dart b/lib/screens/helper/dialog_helper.dart index da4401a..ae90c8b 100644 --- a/lib/screens/helper/dialog_helper.dart +++ b/lib/screens/helper/dialog_helper.dart @@ -10,7 +10,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class DialogHelper { // Function to show the dialog where the user has to choose if he want to safe his values as a template static Future showTemplateDialog(BuildContext context, - List emptyField, Map saveData) async { + List emptyField, Map saveData) async { return showDialog( context: context, barrierDismissible: false, @@ -39,7 +39,7 @@ class DialogHelper { } static Future showServerErrorDialog( - BuildContext context, Map saveData, bool isTemplate) { + BuildContext context, Map saveData, bool isTemplate) { bool isLoading = false; return showDialog( @@ -89,7 +89,7 @@ class DialogHelper { } static Future showSaveOptionsDialog(BuildContext context, - Map saveData, bool isTemplate) async { + Map saveData, bool isTemplate) async { bool isLoading = false; return showDialog( diff --git a/lib/screens/sharedMethods/http_request.dart b/lib/screens/sharedMethods/http_request.dart index 5969422..b190d00 100644 --- a/lib/screens/sharedMethods/http_request.dart +++ b/lib/screens/sharedMethods/http_request.dart @@ -6,7 +6,7 @@ import 'package:dio/dio.dart'; import 'package:shared_preferences/shared_preferences.dart'; class HttpRequest { - static Future httpRequest({Map? saveDataMap, String? saveDataString}) async { + static Future httpRequest({Map? saveDataMap, String? saveDataString}) async { // print(jsonEncode(place)); final dio = Dio(); diff --git a/lib/screens/sharedMethods/save_file.dart b/lib/screens/sharedMethods/save_file.dart index ea56c6b..8c351d8 100644 --- a/lib/screens/sharedMethods/save_file.dart +++ b/lib/screens/sharedMethods/save_file.dart @@ -5,7 +5,7 @@ import 'package:file_picker/file_picker.dart'; import 'package:shared_preferences/shared_preferences.dart'; class SaveFileMethod { - static Future saveFile(Map place, String fileNameLocalization, String placeID) async { + static Future saveFile(Map place, String fileNameLocalization, String placeID) async { String? selectedDirectory = await FilePicker.platform.getDirectoryPath(); SharedPreferences prefs = await SharedPreferences.getInstance(); String jsonPlace = jsonEncode(place); diff --git a/lib/screens/sharedMethods/save_main_entry.dart b/lib/screens/sharedMethods/save_main_entry.dart index c4bfaa5..47b2889 100644 --- a/lib/screens/sharedMethods/save_main_entry.dart +++ b/lib/screens/sharedMethods/save_main_entry.dart @@ -2,7 +2,7 @@ import 'package:fforte/methods/place_db_helper.dart'; class SaveMainEntryMethod { static void saveEntry( - {required Map entryData, + {required Map entryData, required bool isTemplate, bool sent = false}) async { var placeDB = PlaceDBHelper(); @@ -15,7 +15,7 @@ class SaveMainEntryMethod { } if (isTemplate) { - await placeDB.deleteTemplateById(entryData["CID"]); + await placeDB.deleteTemplateById(entryData["CID"]!); } } } diff --git a/lib/screens/sharedMethods/save_template.dart b/lib/screens/sharedMethods/save_template.dart index c7171c4..05d514e 100644 --- a/lib/screens/sharedMethods/save_template.dart +++ b/lib/screens/sharedMethods/save_template.dart @@ -3,7 +3,7 @@ import 'package:fforte/interfaces/i_db.dart'; import 'package:fforte/methods/excursion_db_helper.dart'; import 'package:fforte/methods/place_db_helper.dart'; -void saveTemplate(Map templateData, DatabasesEnum dbType, +void saveTemplate(Map templateData, DatabasesEnum dbType, bool update) async { IDb dbHelper; if (dbType == DatabasesEnum.place) { diff --git a/time.txt b/time.txt index 05fd66a..e9a47e0 100644 --- a/time.txt +++ b/time.txt @@ -76,3 +76,4 @@ 4. mai 45min 5. mai 2h 15min 6. mai 2h 15min +7. mai 2h 45min