rewrote check_required and did some map stuff. also fixed that typed in text in add place isnt saved

This commit is contained in:
Nico
2025-05-09 22:29:34 +02:00
parent b7b16c6acb
commit cdd7f5cafb
5 changed files with 158 additions and 95 deletions

View File

@@ -59,7 +59,7 @@
"pickDate": "Aufstellung",
"pickTime": "Zeit auswählen",
"delAll": "Alle Standorte löschen",
"fieldEmpty": "Folgende Felder sind leer:",
"fieldEmpty": "Pflichtfeld(er) nicht ausgefüllt",
"cancel": "Abbrechen",
"template": "Als Unvollständig speichern",
"openMap": "Karte öffnen",

View File

@@ -297,7 +297,7 @@
"@delAll": {
"description": "Delete all Places"
},
"fieldEmpty": "Following Field is empty:",
"fieldEmpty": "Required field(s) empty",
"@fieldEmpty": {
"description": "field empty error message"
},

View File

@@ -1,9 +1,11 @@
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/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/check_required.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';
@@ -17,7 +19,7 @@ class AddCamMain extends StatefulWidget {
final bool isTemplate;
final bool isFinished;
final bool isSent;
final Map<String, TextEditingController>? existingData;
final Map<String, dynamic>? existingData;
const AddCamMain(
{super.key,
@@ -80,61 +82,105 @@ class _AddCamMainState extends State<AddCamMain> {
DateTime? kontDat = DateTime.now();
DateTime? protoAm = DateTime.now();
Map<String, TextEditingController> getFieldsController() {
Map<String, TextEditingController> rmap = {
static Map<String, Map<String, dynamic>> rmap = {
// Step 1
"Status": TextEditingController(),
"Betreuung": TextEditingController(),
"Standort": TextEditingController(),
"CID": TextEditingController(),
"FFTyp": TextEditingController(),
"Mez": TextEditingController(),
"KSchloNr": TextEditingController(),
"Rudel": TextEditingController(),
"Standort": { "controller": TextEditingController(), "required": true, },
"Status": { "controller": TextEditingController(), "required": true, },
"Betreuung": { "controller": TextEditingController(), "required": false, },
"CID": { "controller": TextEditingController(), "required": true, },
"FFTyp": { "controller": TextEditingController(), "required": true, },
"Mez": { "controller": TextEditingController(), "required": true, },
"KSchloNr": { "controller": TextEditingController(), "required": false, },
"Rudel": { "controller": TextEditingController(), "required": true, },
// Step 2
"OrtInfo": TextEditingController(),
"BeiOrt": TextEditingController(),
"Bland": TextEditingController(),
"Lkr": TextEditingController(),
"Platzung": TextEditingController(),
"DECLNG": { "controller": TextEditingController(), "required": false, },
"DECLAT": { "controller": TextEditingController(), "required": false, },
"Bland": { "controller": TextEditingController(), "required": true, },
"Lkr": { "controller": TextEditingController(), "required": true, },
"BeiOrt": { "controller": TextEditingController(), "required": true, },
"OrtInfo": { "controller": TextEditingController(), "required": false, },
"Platzung": { "controller": TextEditingController(), "required": true, },
// Step 3
"DECLNG": TextEditingController(),
"DECLAT": TextEditingController(),
"Datum": TextEditingController(),
"KontDat": TextEditingController(),
"KTage1": TextEditingController(),
"KTage2": TextEditingController(),
"AbbauDat": TextEditingController(),
"Auftrag": TextEditingController(),
"KontAbsp": TextEditingController(),
"SonstBem": TextEditingController(),
"Datum": { "controller": TextEditingController(), "required": false, },
"KontDat": { "controller": TextEditingController(), "required": false, },
"KTage1": { "controller": TextEditingController(), "required": true, },
"KTage2": { "controller": TextEditingController(), "required": true, },
"AbbauDat": { "controller": TextEditingController(), "required": false, },
"Auftrag": { "controller": TextEditingController(), "required": false, },
"KontAbsp": { "controller": TextEditingController(), "required": false, },
"SonstBem": { "controller": TextEditingController(), "required": false, },
// Step 4
"Adresse1": TextEditingController(),
"Adresse2": TextEditingController(),
"Adresse3": TextEditingController(),
"FKontakt1": TextEditingController(),
"FKontakt2": TextEditingController(),
"FKontakt3": TextEditingController(),
"IntKomm": TextEditingController(),
"Adresse1": { "controller": TextEditingController(), "required": true, },
"Adresse2": { "controller": TextEditingController(), "required": false, },
"Adresse3": { "controller": TextEditingController(), "required": false, },
"FKontakt1": { "controller": TextEditingController(), "required": false, },
"FKontakt2": { "controller": TextEditingController(), "required": false, },
"FKontakt3": { "controller": TextEditingController(), "required": false, },
"IntKomm": { "controller": TextEditingController(), "required": false, },
// Gone?
"ProtoAm": TextEditingController(),
"FotoFilm": TextEditingController(),
"ProtoAm": { "controller": TextEditingController(), "required": false, },
"FotoFilm": { "controller": TextEditingController(), "required": false, },
};
return rmap;
}
// Map<String, Map<String, dynamic>> rmap {
// Map<String, Map<String, dynamic>> rmap = {
// // Step 1
// "Standort": { "controller": betreuungC, "required": true, },
// "Status": { "controller": TextEditingController(), "required": true, },
// "Betreuung": { "controller": TextEditingController(), "required": false, },
// "CID": { "controller": TextEditingController(), "required": true, },
// "FFTyp": { "controller": TextEditingController(), "required": true, },
// "Mez": { "controller": TextEditingController(), "required": true, },
// "KSchloNr": { "controller": TextEditingController(), "required": false, },
// "Rudel": { "controller": TextEditingController(), "required": true, },
//
// // Step 2
// "DECLNG": { "controller": TextEditingController(), "required": false, },
// "DECLAT": { "controller": TextEditingController(), "required": false, },
// "Bland": { "controller": TextEditingController(), "required": true, },
// "Lkr": { "controller": TextEditingController(), "required": true, },
// "BeiOrt": { "controller": TextEditingController(), "required": true, },
// "OrtInfo": { "controller": TextEditingController(), "required": false, },
// "Platzung": { "controller": TextEditingController(), "required": true, },
//
// // Step 3
// "Datum": { "controller": TextEditingController(), "required": false, },
// "KontDat": { "controller": TextEditingController(), "required": false, },
// "KTage1": { "controller": TextEditingController(), "required": true, },
// "KTage2": { "controller": TextEditingController(), "required": true, },
// "AbbauDat": { "controller": TextEditingController(), "required": false, },
// "Auftrag": { "controller": TextEditingController(), "required": false, },
// "KontAbsp": { "controller": TextEditingController(), "required": false, },
// "SonstBem": { "controller": TextEditingController(), "required": false, },
//
// // Step 4
// "Adresse1": { "controller": TextEditingController(), "required": true, },
// "Adresse2": { "controller": TextEditingController(), "required": false, },
// "Adresse3": { "controller": TextEditingController(), "required": false, },
// "FKontakt1": { "controller": TextEditingController(), "required": false, },
// "FKontakt2": { "controller": TextEditingController(), "required": false, },
// "FKontakt3": { "controller": TextEditingController(), "required": false, },
// "IntKomm": { "controller": TextEditingController(), "required": false, },
//
// // Gone?
// "ProtoAm": { "controller": TextEditingController(), "required": false, },
// "FotoFilm": { "controller": TextEditingController(), "required": false, },
// };
// return rmap;
// }
Map<String, String> getFieldsText() {
Map<String, String> rmap = {};
Map<String, String> puff = {};
for (var itemKey in getFieldsController().keys) {
rmap[itemKey] = getFieldsController()["key"]!.text;
for (var itemKey in rmap.keys) {
puff[itemKey] = rmap[itemKey]!["controller"]!.text;
}
return rmap;
return puff;
}
// Map<String, dynamic> getPlace() {
@@ -177,11 +223,9 @@ class _AddCamMainState extends State<AddCamMain> {
// return place;
// }
bool empty = false;
@override
void initState() {
super.initState();
// updates the currentPosition var after the _determine position has finished. Means user view updates with his live location
try {
@@ -194,6 +238,11 @@ class _AddCamMainState extends State<AddCamMain> {
SnackBarHelper.showSnackBarMessage(
context, AppLocalizations.of(context)!.locationForbidden);
}
// select initial werte
rmap["Mez"]!["controller"]!.text = selectedMEZ;
rmap["Status"]!["controller"]!.text = selectedStatus;
// 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) {
@@ -234,6 +283,7 @@ class _AddCamMainState extends State<AddCamMain> {
// intKommC.text = widget.existingData!['IntKomm'] ?? "";
// betreuungC.text = widget.existingData!['Betreuung'] ?? "";
// }
super.initState();
}
// checks if required fields are not empty. If one is the name will be returned
@@ -290,7 +340,8 @@ class _AddCamMainState extends State<AddCamMain> {
child: VarTextField(
required: true,
dbName: "Standort",
textController: getFieldsController()["Standort"]!,
textController: rmap["Standort"]!["controller"]!,
// textController: betreuungC,
localization: AppLocalizations.of(context)!.altstort,
dbDesignation: DatabasesEnum.place,
),
@@ -314,13 +365,13 @@ class _AddCamMainState extends State<AddCamMain> {
initialStatus: selectedStatus,
onStatusChanged: (status) {
setState(() {
getFieldsController()["Status"]!.text = status;
rmap["Status"]!["controller"]!.text = status;
});
},
),
// --------------------
VarTextField(
textController: getFieldsController()["Betreuung"]!,
textController: rmap["Betreuung"]!["controller"]!,
localization: AppLocalizations.of(context)!.betreuung,
dbName: "Betreuung",
required: false,
@@ -331,7 +382,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["CID"]!,
textController: rmap["CID"]!["controller"],
localization: AppLocalizations.of(context)!.camLink,
dbName: "CID",
required: true,
@@ -339,7 +390,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["FFTyp"]!,
textController: rmap["FFTyp"]!["controller"],
localization: AppLocalizations.of(context)!.fftyp,
dbName: "FFTyp",
required: true,
@@ -365,7 +416,7 @@ class _AddCamMainState extends State<AddCamMain> {
onMEZChanged: (mez) {
setState(() {
selectedMEZ = mez;
getFieldsController()["Mez"]!.text = mez;
rmap["Mez"]!["controller"]!.text = mez;
});
},
),
@@ -374,7 +425,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["KSchloNr"]!,
textController: rmap["KSchloNr"]!["controller"],
localization: AppLocalizations.of(context)!.kschlonr,
dbName: "KSchloNr",
required: false,
@@ -385,7 +436,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["Rudel"]!,
textController: rmap["Rudel"]!["controller"],
localization: AppLocalizations.of(context)!.rudel,
dbName: "Rudel",
required: true,
@@ -420,15 +471,15 @@ class _AddCamMainState extends State<AddCamMain> {
.push<LatLng>(
MaterialPageRoute(builder: (context) {
return Karte(
ortInfoC: getFieldsController()["OrtInfo"]!,
beiOrtC: getFieldsController()["BeiOrt"]!,
ortInfoC: rmap["OrtInfo"]!["controller"],
beiOrtC: rmap["BeiOrt"]!["controller"],
currentPosition: currentPosition,
onPositionChange: (updatedPosition) {
setState(() {
currentPosition = updatedPosition;
getFieldsController()["DECLNG"]!.text =
rmap["DECLNG"]!["controller"]!.text =
updatedPosition.longitude.toString();
getFieldsController()["DECLAT"]!.text =
rmap["DECLAT"]!["controller"]!.text =
updatedPosition.latitude.toString();
});
},
@@ -456,7 +507,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["Bland"]!,
textController: rmap["Bland"]!["controller"]!,
localization: AppLocalizations.of(context)!.bland,
dbName: "BLand",
required: true,
@@ -465,7 +516,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["Lkr"]!,
textController: rmap["Lkr"]!["controller"]!,
localization: AppLocalizations.of(context)!.lkr,
dbName: "Lkr",
required: true,
@@ -473,7 +524,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["BeiOrt"]!,
textController: rmap["BeiOrt"]!["controller"]!,
localization: AppLocalizations.of(context)!.beiort,
dbName: "BeiOrt",
required: true,
@@ -481,7 +532,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["OrtInfo"]!,
textController: rmap["OrtInfo"]!["controller"]!,
localization: AppLocalizations.of(context)!.ortinfo,
dbName: "OrtInfo",
required: false,
@@ -507,7 +558,7 @@ class _AddCamMainState extends State<AddCamMain> {
onPlatzungChanged: (platzung) {
setState(() {
selectedPlatzung = platzung;
getFieldsController()["Platzung"]!.text = platzung;
rmap["Platzung"]!["controller"]!.text = platzung;
});
},
),
@@ -522,7 +573,7 @@ class _AddCamMainState extends State<AddCamMain> {
initDatum: datum,
onDateChanged: (value) {
datum = value;
getFieldsController()["Datum"]!.text =
rmap["Datum"]!["controller"]!.text =
value.toString().split(" ").first;
},
name: AppLocalizations.of(context)!.pickDate,
@@ -533,7 +584,7 @@ class _AddCamMainState extends State<AddCamMain> {
onDateChanged: (value) {
setState(() {
kontDat = value;
getFieldsController()["KontDat"]!.text =
rmap["KontDat"]!["controller"]!.text =
value.toString().split(" ").first;
});
},
@@ -565,7 +616,7 @@ class _AddCamMainState extends State<AddCamMain> {
flex: 4,
child: VarTextField(
otherDefault: "24",
textController: getFieldsController()["KTage1"]!,
textController: rmap["KTage1"]!["controller"]!,
localization: AppLocalizations.of(context)!.ktage1,
dbName: "KTage1",
required: true,
@@ -584,7 +635,7 @@ class _AddCamMainState extends State<AddCamMain> {
flex: 4,
child: VarTextField(
otherDefault: "48",
textController: getFieldsController()["KTage2"]!,
textController: rmap["KTage2"]!["controller"]!,
localization: AppLocalizations.of(context)!.ktage2,
dbName: "KTage2",
required: true,
@@ -602,7 +653,7 @@ class _AddCamMainState extends State<AddCamMain> {
initAbbauDat: abbauDat,
onDateChanged: (value) {
abbauDat = value;
getFieldsController()["AbbauDat"]!.text =
rmap["AbbauDat"]!["controller"]!.text =
value.toString().split(" ").first;
},
),
@@ -613,7 +664,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["Auftrag"]!,
textController: rmap["Auftrag"]!["controller"]!,
localization: AppLocalizations.of(context)!.auftrag,
dbName: "Auftrag",
required: false,
@@ -621,7 +672,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["KontAbsp"]!,
textController: rmap["KontAbsp"]!["controller"]!,
localization: AppLocalizations.of(context)!.kontabsp,
dbName: "KontAbsp",
required: false,
@@ -629,7 +680,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["SonstBem"]!,
textController: rmap["SonstBem"]!["controller"]!,
localization:
AppLocalizations.of(context)!.sonstbemerkungen,
dbName: "SonstBem",
@@ -643,7 +694,7 @@ class _AddCamMainState extends State<AddCamMain> {
content: Column(
children: [
VarTextField(
textController: getFieldsController()["Adresse1"]!,
textController: rmap["Adresse1"]!["controller"]!,
localization: AppLocalizations.of(context)!.adresse1,
dbName: "Adresse1",
dbDesignation: DatabasesEnum.place,
@@ -652,7 +703,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["Adresse2"]!,
textController: rmap["Adresse2"]!["controller"]!,
localization: AppLocalizations.of(context)!.adresse2,
dbName: "Adresse2",
required: false,
@@ -660,7 +711,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["Adresse3"]!,
textController: rmap["Adresse3"]!["controller"]!,
localization: AppLocalizations.of(context)!.adresse3,
dbName: "Adresse3",
required: false,
@@ -671,7 +722,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["FKontakt1"]!,
textController: rmap["FKontakt1"]!["controller"]!,
localization: AppLocalizations.of(context)!.fkontakt1,
dbName: "FKontakt1",
required: false,
@@ -679,7 +730,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["FKontakt2"]!,
textController: rmap["FKontakt2"]!["controller"]!,
localization: AppLocalizations.of(context)!.fkontakt2,
dbName: "FKontakt2",
required: false,
@@ -687,7 +738,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["FKontakt3"]!,
textController: rmap["FKontakt3"]!["controller"]!,
localization: AppLocalizations.of(context)!.fkontakt3,
dbName: "FKontakt3",
required: false,
@@ -695,7 +746,7 @@ class _AddCamMainState extends State<AddCamMain> {
),
// --------------------
VarTextField(
textController: getFieldsController()["IntKomm"]!,
textController: rmap["IntKomm"]!["controller"]!,
localization: AppLocalizations.of(context)!.intkomm,
dbName: "IntKomm",
required: false,
@@ -741,21 +792,24 @@ class _AddCamMainState extends State<AddCamMain> {
currentStep += 1;
});
} else {
// TODO implement validateData again
// List<String> 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);
// }
if (widget.isSent) {
Navigator.pushNamedAndRemoveUntil(
context, '/home', (route) => false);
return;
}
bool empty = CheckRequired.checkRequired(rmap);
if (empty == true) {
DialogHelper.showTemplateDialog(
context, getFieldsText());
return;
} else if (empty == false) {
await DialogHelper.showSaveOptionsDialog(
context, getFieldsText(), widget.isTemplate);
}
}
},
onStepCancel: () {

View File

@@ -10,16 +10,13 @@ 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<void> showTemplateDialog(BuildContext context,
List<String> emptyField, Map<String, String> saveData) async {
Map<String, String> saveData) async {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: Text(AppLocalizations.of(context)!.fieldEmpty),
content: SingleChildScrollView(
child: ListBody(children: <Widget>[Text(emptyField.join("; "))]),
),
actions: <Widget>[
TextButton(
onPressed: () {

View File

@@ -0,0 +1,12 @@
class CheckRequired {
static bool checkRequired(Map<String, Map<String, dynamic>> fieldsList) {
for (String key in fieldsList.keys) {
if (fieldsList[key]!["required"]! && fieldsList[key]!["controller"]!.text.isEmpty) {
return true;
}
}
return false;
}
}