From d1ce04d2d0e41fdb84451e8ecca230efb1151f71 Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 21 Mar 2024 21:22:29 +0100 Subject: [PATCH] sitzung luc --- Todo.txt | 13 +- lib/addCam/add_cam_main.dart | 469 +++++++++++++---------------------- lib/addCam/cam_widgets.dart | 285 +++++++++++---------- lib/db_helper.dart | 4 +- lib/intro_screen.dart | 50 +++- lib/l10n/app_de.arb | 43 ++-- lib/l10n/app_en.arb | 46 ++-- lib/settings.dart | 96 +------ lib/viewCam/view_cams.dart | 8 +- time.txt | 3 +- untranslated.txt | 6 +- 11 files changed, 444 insertions(+), 579 deletions(-) diff --git a/Todo.txt b/Todo.txt index fcf3733..f9de3f7 100644 --- a/Todo.txt +++ b/Todo.txt @@ -7,17 +7,24 @@ beim nächsten schritt als template im englischen abändern standort automatisch in Karte karte drehen aus -Auftrag absätze machen und textfeld größer wenn langer text +Überall absätze machen und textfeld größer wenn langer text beim letzten weiter alle leeren felder anzeigen (array zurückgeben) gespeicherten ordner anzeigen zurückfeld in datenansicht überschriften für view cams -null eintrag in dropdown menüs weg +dropdown menü fixen speichern funktion zum Abbrechen fehler beim speichern anzeigen -place variable ein mal deklarieren in add_cam_main nach koordinaten lkr auswählen (esri-leaflet-geocoder) nach screenshots sortieren +dropdown button in add_cam_main fixen +schritte latlang umbenennen +fix ktage und nebeneinander positioniere +wenn alles ausgefüllt trotzdem als template speichern +textdateien auch an server senden +ausvon und ausbis fixen (falsches datum übergeben (20000-01-01)) + + not to do: diff --git a/lib/addCam/add_cam_main.dart b/lib/addCam/add_cam_main.dart index 4aab8b1..0267428 100644 --- a/lib/addCam/add_cam_main.dart +++ b/lib/addCam/add_cam_main.dart @@ -10,8 +10,8 @@ import 'package:geolocator/geolocator.dart'; import 'package:intl/intl.dart'; import 'package:latlong2/latlong.dart'; import 'package:animations/animations.dart'; -import 'package:http/http.dart' as http; import 'package:dio/dio.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class AddCamMain extends StatefulWidget { final bool isTemplate; @@ -30,9 +30,9 @@ class _AddCamMainState extends State { TextEditingController id = TextEditingController(); TextEditingController rudelC = TextEditingController(); - TextEditingController nameVornameC = TextEditingController(); - TextEditingController plzOrtC = TextEditingController(); - TextEditingController emailTelC = TextEditingController(); + TextEditingController addresse1C = TextEditingController(); + TextEditingController addresse2C = TextEditingController(); + TextEditingController addresse3C = TextEditingController(); TextEditingController bLandC = TextEditingController(); TextEditingController lkrC = TextEditingController(); TextEditingController beiOrtC = TextEditingController(); @@ -49,14 +49,14 @@ class _AddCamMainState extends State { TextEditingController kTage1C = TextEditingController(); TextEditingController kTage2C = TextEditingController(); TextEditingController intKommC = TextEditingController(); - TextEditingController kontSumC = TextEditingController(); + TextEditingController betreuungC = TextEditingController(); String selectedStatus = 'aktiv'; String selectedSTTyp = 'opportunistisch'; - String selectedFotoFilm = 'foto'; - String selectedMEZ = 'sommerzeit'; - String selectedPlatzung = 'kirrung'; - String selectedBearsafe = 'nein'; + String selectedFotoFilm = 'Foto'; + String selectedMEZ = 'Sommerzeit'; + String selectedPlatzung = 'Kirrung'; + String selectedBearsafe = 'Nein'; Position currentPosition = Position( longitude: 10.0, @@ -83,6 +83,49 @@ class _AddCamMainState extends State { DateTime kontDat = DateTime.now(); DateTime protoAm = DateTime.now(); + Map getPlace() { + Map place = { + 'CID': id.text, + 'Rudel': rudelC.text, + 'Datum': datumS, + 'Adresse1': addresse1C.text, + 'Adresse2': addresse2C.text, + 'Adresse3': addresse3C.text, + 'BLand': bLandC.text, + 'Lkr': lkrC.text, + 'BeiOrt': beiOrtC.text, + 'OrtInfo': ortInfoC.text, + 'Status': selectedStatus, + 'STTyp': selectedSTTyp, + 'FFTyp': ffTypC.text, + 'FotoFilm': selectedFotoFilm, + 'MEZ': selectedMEZ, + 'Platzung': selectedPlatzung, + 'KSchloNr': kSchloNrC.text, + 'Bearsafe': selectedBearsafe, + 'KontDat': kontDatS, + 'AbbauDat': abbauDatS, + 'Auftrag': auftragC.text, + 'KontAbsp': absprachenC.text, + 'SonstBem': sonstBemerkungenC.text, + 'FKontakt1': fKontakt1C.text, + 'FKontakt2': fKontakt2C.text, + 'FKontakt3': fKontakt3C.text, + 'Standort': altStOrtC.text, + 'AusVon': ausVonS, + 'AusBis': ausBisS, + 'KTage1': kTage1C.text, + 'KTage2': kTage2C.text, + 'ProtoAm': protoAmS, + 'IntKomm': intKommC.text, + 'Betreuung': betreuungC.text, + 'DECLNG': currentPosition.longitude, + 'DECLAT': currentPosition.latitude, + }; + + return place; + } + bool empty = false; // determine live position with checks for denied permission and turned off location service @@ -137,9 +180,9 @@ class _AddCamMainState extends State { if (widget.isTemplate && widget.templateData != null) { id.text = widget.templateData!['CID']; rudelC.text = widget.templateData!['Rudel']; - nameVornameC.text = widget.templateData!['NameVorname']; - plzOrtC.text = widget.templateData!['PLZOrt']; - emailTelC.text = widget.templateData!['EmailTel']; + addresse1C.text = widget.templateData!['Addresse1']; + addresse2C.text = widget.templateData!['Addresse2']; + addresse3C.text = widget.templateData!['Addresse3']; bLandC.text = widget.templateData!['BLand']; lkrC.text = widget.templateData!['Lkr']; beiOrtC.text = widget.templateData!['BeiOrt']; @@ -168,7 +211,7 @@ class _AddCamMainState extends State { kTage2C.text = widget.templateData!['KTage2'].toString(); protoAmS = widget.templateData!['ProtoAm']; intKommC.text = widget.templateData!['IntKomm']; - kontSumC.text = widget.templateData!['KontSum']; + betreuungC.text = widget.templateData!['Betreuung']; } } @@ -228,42 +271,7 @@ class _AddCamMainState extends State { } void _httpRequest() async { - Map place = { - 'CID': id.text, - 'Rudel': rudelC.text, - 'Datum': datumS, - 'NameVorname': nameVornameC.text, - 'PLZOrt': plzOrtC.text, - 'EmailTel': emailTelC.text, - 'BLand': bLandC.text, - 'Lkr': lkrC.text, - 'BeiOrt': beiOrtC.text, - 'OrtInfo': ortInfoC.text, - 'Status': selectedStatus, - 'STTyp': selectedSTTyp, - 'FFTyp': ffTypC.text, - 'FotoFilm': selectedFotoFilm, - 'MEZ': selectedMEZ, - 'Platzung': selectedPlatzung, - 'KSchloNr': kSchloNrC.text, - 'Bearsafe': selectedBearsafe, - 'KontDat': kontDatS, - 'AbbauDat': abbauDatS, - 'Auftrag': auftragC.text, - 'Absprachen': absprachenC.text, - 'SonstBemerkungen': sonstBemerkungenC.text, - 'FKontakt1': fKontakt1C.text, - 'FKontakt2': fKontakt2C.text, - 'FKontakt3': fKontakt3C.text, - 'AltStOrt': altStOrtC.text, - 'AusVon': ausVonS, - 'AusBis': ausBisS, - 'KTage1': kTage1C.text, - 'KTage2': kTage2C.text, - 'ProtoAm': protoAmS, - 'IntKomm': intKommC.text, - 'KontSum': kontSumC.text, - }; + Map place = getPlace(); /* final response = await http.post( Uri.parse('http://192.168.1.106/www.dbb-wolf.de/data/_app24.php'), @@ -276,13 +284,14 @@ class _AddCamMainState extends State { print(jsonEncode(place)); final dio = Dio(); + final SharedPreferences prefs = await SharedPreferences.getInstance(); + dio.options.responseType = ResponseType.plain; Response response = Response(requestOptions: RequestOptions(path: ''), statusCode: 400); try { - response = await dio.post( - 'http://192.168.1.106/www.dbb-wolf.de/data/_app24.php', + response = await dio.post(prefs.getString('apiAddress') ?? "", data: jsonEncode(place)); } on DioException catch (e) { if (e.response?.statusCode == 500) { @@ -302,42 +311,8 @@ class _AddCamMainState extends State { Future saveFile() async { String? selectedDirectory = await FilePicker.platform.getDirectoryPath(); - Map place = { - 'CID': id.text, - 'Rudel': rudelC.text, - 'Datum': datumS, - 'NameVorname': nameVornameC.text, - 'PLZOrt': plzOrtC.text, - 'EmailTel': emailTelC.text, - 'BLand': bLandC.text, - 'Lkr': lkrC.text, - 'BeiOrt': beiOrtC.text, - 'OrtInfo': ortInfoC.text, - 'Status': selectedStatus, - 'STTyp': selectedSTTyp, - 'FFTyp': ffTypC.text, - 'FotoFilm': selectedFotoFilm, - 'MEZ': selectedMEZ, - 'Platzung': selectedPlatzung, - 'KSchloNr': kSchloNrC.text, - 'Bearsafe': selectedBearsafe, - 'KontDat': kontDatS, - 'AbbauDat': abbauDatS, - 'Auftrag': auftragC.text, - 'Absprachen': absprachenC.text, - 'SonstBemerkungen': sonstBemerkungenC.text, - 'FKontakt1': fKontakt1C.text, - 'FKontakt2': fKontakt2C.text, - 'FKontakt3': fKontakt3C.text, - 'AltStOrt': altStOrtC.text, - 'AusVon': ausVonS, - 'AusBis': ausBisS, - 'KTage1': kTage1C.text, - 'KTage2': kTage2C.text, - 'ProtoAm': protoAmS, - 'IntKomm': intKommC.text, - 'KontSum': kontSumC.text, - }; + Map place = getPlace(); + String jsonPlace = jsonEncode(place); if (selectedDirectory == null) { @@ -358,7 +333,7 @@ class _AddCamMainState extends State { Map fields = { 'CID': id, 'Rudel': rudelC, - 'NameVorname': nameVornameC, + 'Addresse1': addresse1C, 'BLand': bLandC, 'Lkr': lkrC, 'BeiOrt': beiOrtC, @@ -370,6 +345,7 @@ class _AddCamMainState extends State { 'Platzung': TextEditingController(text: selectedPlatzung), 'KTage1': kTage1C, 'KTage2': kTage2C, + 'Standort': altStOrtC, }; for (var entry in fields.entries) { @@ -388,42 +364,8 @@ class _AddCamMainState extends State { // If the user already edits a template this template will be upadted otherwise a new one will be created void saveTemplate() async { var placeDB = DBHelper(); - Map templates = { - 'CID': id.text, - 'Rudel': rudelC.text, - 'Datum': datumS, - 'NameVorname': nameVornameC.text, - 'PLZOrt': plzOrtC.text, - 'EmailTel': emailTelC.text, - 'BLand': bLandC.text, - 'Lkr': lkrC.text, - 'BeiOrt': beiOrtC.text, - 'OrtInfo': ortInfoC.text, - 'Status': selectedStatus, - 'STTyp': selectedSTTyp, - 'FFTyp': ffTypC.text, - 'FotoFilm': selectedFotoFilm, - 'MEZ': selectedMEZ, - 'Platzung': selectedPlatzung, - 'KSchloNr': kSchloNrC.text, - 'Bearsafe': selectedBearsafe, - 'KontDat': kontDatS, - 'AbbauDat': abbauDatS, - 'Auftrag': auftragC.text, - 'Absprachen': absprachenC.text, - 'SonstBemerkungen': sonstBemerkungenC.text, - 'FKontakt1': fKontakt1C.text, - 'FKontakt2': fKontakt2C.text, - 'FKontakt3': fKontakt3C.text, - 'AltStOrt': altStOrtC.text, - 'AusVon': ausVonS, - 'AusBis': ausBisS, - 'KTage1': kTage1C.text, - 'KTage2': kTage2C.text, - 'ProtoAm': protoAmS, - 'IntKomm': intKommC.text, - 'KontSum': kontSumC.text, - }; + + Map templates = getPlace(); if (widget.isTemplate) { await placeDB.updateTemplate(templates); @@ -436,42 +378,8 @@ class _AddCamMainState extends State { // * also creates a json string to send it to the server later void saveData() async { var placeDB = DBHelper(); - Map place = { - 'CID': id.text, - 'Rudel': rudelC.text, - 'Datum': datumS, - 'NameVorname': nameVornameC.text, - 'PLZOrt': plzOrtC.text, - 'EmailTel': emailTelC.text, - 'BLand': bLandC.text, - 'Lkr': lkrC.text, - 'BeiOrt': beiOrtC.text, - 'OrtInfo': ortInfoC.text, - 'Status': selectedStatus, - 'STTyp': selectedSTTyp, - 'FFTyp': ffTypC.text, - 'FotoFilm': selectedFotoFilm, - 'MEZ': selectedMEZ, - 'Platzung': selectedPlatzung, - 'KSchloNr': kSchloNrC.text, - 'Bearsafe': selectedBearsafe, - 'KontDat': kontDatS, - 'AbbauDat': abbauDatS, - 'Auftrag': auftragC.text, - 'Absprachen': absprachenC.text, - 'SonstBemerkungen': sonstBemerkungenC.text, - 'FKontakt1': fKontakt1C.text, - 'FKontakt2': fKontakt2C.text, - 'FKontakt3': fKontakt3C.text, - 'AltStOrt': altStOrtC.text, - 'AusVon': ausVonS, - 'AusBis': ausBisS, - 'KTage1': kTage1C.text, - 'KTage2': kTage2C.text, - 'ProtoAm': protoAmS, - 'IntKomm': intKommC.text, - 'KontSum': kontSumC.text, - }; + + Map place = getPlace(); await placeDB.addPlace(place); } @@ -490,32 +398,19 @@ class _AddCamMainState extends State { alignment: Alignment.bottomLeft, child: AltStOrt(altStOrtC: altStOrtC), ), - CamId(id: id), - Align( - alignment: Alignment.bottomLeft, - child: FFTyp(ffTypC: ffTypC), - ), - Rudel(rudelC: rudelC), const SizedBox( - height: 15, + height: 1, ), - Align( - alignment: Alignment.bottomLeft, - child: Row( - children: [ - Text(AppLocalizations.of(context)!.bearsafe), - ], - )), - Bearsafe( - initialBearsafe: selectedBearsafe, - onBearsafeChanged: (bearsafe) { + STTyp( + initialSTTyp: selectedSTTyp, + onSTTypChanged: (sttyp) { setState(() { - selectedBearsafe = bearsafe; + selectedSTTyp = sttyp; }); }, ), const SizedBox( - height: 15, + height: 5, ), Align( alignment: Alignment.bottomLeft, @@ -536,116 +431,18 @@ class _AddCamMainState extends State { }); }, ), + Betreuung(betreuungC: betreuungC), const SizedBox( - height: 15, + height: 20, ), + CamId(id: id), Align( - alignment: Alignment.bottomLeft, - child: Row( - children: [ - Text(AppLocalizations.of(context)!.sttyp), - const Text( - '*', - style: TextStyle(color: Colors.red), - ) - ], - )), - STTyp( - initialSTTyp: selectedSTTyp, - onSTTypChanged: (sttyp) { - setState(() { - selectedSTTyp = sttyp; - }); - }, + alignment: Alignment.bottomLeft, + child: FFTyp(ffTypC: ffTypC), ), const SizedBox( height: 15, ), - Align( - alignment: Alignment.bottomLeft, - child: Row( - children: [ - Text( - '${AppLocalizations.of(context)!.foto} ${AppLocalizations.of(context)!.film}'), - const Text( - '*', - style: TextStyle(color: Colors.red), - ) - ], - )), - FotoFilm( - initialFotoFilm: selectedFotoFilm, - onFotoFilmChanged: (fotofilm) { - setState(() { - selectedFotoFilm = fotofilm; - }); - }, - ), - Align( - alignment: Alignment.bottomLeft, - child: KSchloNr(kSchloNrC: kSchloNrC), - ), - const SizedBox( - height: 20, - ), - Align( - alignment: Alignment.bottomLeft, - child: Row( - children: [ - Text(AppLocalizations.of(context)!.ktage1), - const Text( - '*', - style: TextStyle(color: Colors.red), - ) - ], - ), - ), - KTage1(kTage1C: kTage1C), - const SizedBox( - height: 20, - ), - Align( - alignment: Alignment.bottomLeft, - child: Row( - children: [ - Text(AppLocalizations.of(context)!.ktage2), - const Text( - '*', - style: TextStyle(color: Colors.red), - ) - ], - )), - KTage2(kTage2C: kTage2C), - ], - )), - - // Date Step - Step( - title: Text(AppLocalizations.of(context)!.date), - content: Column( - children: [ - Datum( - datum: datum, - ), - const SizedBox( - height: 20, - ), - KontDat(kontDat: kontDat), - const SizedBox( - height: 20, - ), - AbbauDat(abbauDat: abbauDat), - const SizedBox( - height: 20, - ), - AusVon(ausVon: ausVon), - const SizedBox( - height: 20, - ), - AusBis(ausBis: ausBis), - const SizedBox( - height: 20, - ), Align( alignment: Alignment.bottomLeft, child: Row( @@ -665,9 +462,38 @@ class _AddCamMainState extends State { }); }, ), - KontSum(kontSumC: kontSumC), + Align( + alignment: Alignment.bottomLeft, + child: Row( + children: [ + Text(AppLocalizations.of(context)!.bearsafe), + ], + )), + Bearsafe( + initialBearsafe: selectedBearsafe, + onBearsafeChanged: (bearsafe) { + setState(() { + selectedBearsafe = bearsafe; + }); + }, + ), + const SizedBox( + height: 15, + ), + Align( + alignment: Alignment.bottomLeft, + child: KSchloNr(kSchloNrC: kSchloNrC), + ), + const SizedBox( + height: 5, + ), + Rudel(rudelC: rudelC), + const SizedBox( + height: 15, + ), ], )), + // Second step (location) Step( title: Text(AppLocalizations.of(context)!.locations), @@ -714,10 +540,6 @@ class _AddCamMainState extends State { }, child: Text(AppLocalizations.of(context)!.openMap)), ), - Align( - alignment: Alignment.bottomLeft, - child: PLZOrt(plzOrtC: plzOrtC), - ), Align( alignment: Alignment.bottomLeft, child: BLand(bLandC: bLandC), @@ -758,22 +580,54 @@ class _AddCamMainState extends State { ), ], )), + // Date Step Step( - title: Text(AppLocalizations.of(context)!.kontakt), + title: Text(AppLocalizations.of(context)!.date), content: Column( children: [ + Datum( + datum: datum, + ), + KontDat(kontDat: kontDat), const SizedBox( - height: 15, + height: 20, + ), + Align( + alignment: Alignment.bottomLeft, + child: Row( + children: [ + Text(AppLocalizations.of(context)!.ktage1), + const Text( + '*', + style: TextStyle(color: Colors.red), + ), + ], + ), + ), + KTage1(kTage1C: kTage1C), + const SizedBox( + height: 20, ), Align( alignment: Alignment.bottomLeft, - child: NameVorname(nameVornameC: nameVornameC)), - Align( - alignment: Alignment.bottomLeft, - child: EmailTel(emailTelC: emailTelC), - ), + child: Row( + children: [ + Text(AppLocalizations.of(context)!.ktage2), + const Text( + '*', + style: TextStyle(color: Colors.red), + ) + ], + )), + KTage2(kTage2C: kTage2C), const SizedBox( - height: 15, + height: 20, + ), + AbbauDat(abbauDat: abbauDat), + AusVon(ausVon: ausVon), + AusBis(ausBis: ausBis), + const SizedBox( + height: 20, ), Align( alignment: Alignment.bottomLeft, @@ -788,6 +642,29 @@ class _AddCamMainState extends State { child: SonstBemerkungen(sonstBemerkungenC: sonstBemerkungenC), ), + ], + )), + Step( + title: Text(AppLocalizations.of(context)!.kontakt), + content: Column( + children: [ + const SizedBox( + height: 15, + ), + Align( + alignment: Alignment.bottomLeft, + child: Addresse1(addresse1C: addresse1C)), + Align( + alignment: Alignment.bottomLeft, + child: Addresse2(addresse2C: addresse2C), + ), + Align( + alignment: Alignment.bottomLeft, + child: Addresse3(addresse3C: addresse3C), + ), + const SizedBox( + height: 15, + ), Align( alignment: Alignment.bottomLeft, child: FKontakt1(fKontakt1C: fKontakt1C), @@ -844,6 +721,8 @@ class _AddCamMainState extends State { }); } else { String emptyField = validateData(); + // ! always fileed out + empty = false; if (empty == true) { showTemplateDialog(emptyField); (); diff --git a/lib/addCam/cam_widgets.dart b/lib/addCam/cam_widgets.dart index 6abe2a1..894b7ab 100644 --- a/lib/addCam/cam_widgets.dart +++ b/lib/addCam/cam_widgets.dart @@ -1,6 +1,7 @@ // ignore_for_file: non_constant_identifier_names import 'package:fforte/db_helper.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:geolocator/geolocator.dart'; @@ -347,20 +348,23 @@ class _DatumState extends State { Widget build(BuildContext context) { return Row( children: [ - Column(children: [ + Row(children: [ + SizedBox( + width: 125, + child: ElevatedButton( + onPressed: () async { + final date = await pickDate(); + if (date == null) return; + setState(() => datum = date); + }, + child: Text(AppLocalizations.of(context)!.pickDate)), + ), + const SizedBox( + width: 10, + ), Text( '${datum?.day}. ${datum?.month}. ${datum?.year}', ), - //const SizedBox( - // height: 2, - //), - ElevatedButton( - onPressed: () async { - final date = await pickDate(); - if (date == null) return; - setState(() => datum = date); - }, - child: Text(AppLocalizations.of(context)!.pickDate)), ]), ], ); @@ -383,20 +387,20 @@ class _DatumState extends State { } } -// NameVorname +// Addresse1 -class NameVorname extends StatefulWidget { - final TextEditingController nameVornameC; +class Addresse1 extends StatefulWidget { + final TextEditingController addresse1C; - const NameVorname({super.key, required this.nameVornameC}); + const Addresse1({super.key, required this.addresse1C}); @override - State createState() => _NameVornameState(); + State createState() => _Addresse1State(); } -class _NameVornameState extends State { +class _Addresse1State extends State { String? selectedRudel; - late Future>> NameVorname; + late Future>> Addresse1; @override void initState() { @@ -404,15 +408,15 @@ class _NameVornameState extends State { _loadPref(); - NameVorname = DBHelper().getPlace(); + Addresse1 = DBHelper().getPlace(); } void _loadPref() { Future.delayed(Duration.zero, () async { SharedPreferences prefs = await SharedPreferences.getInstance(); - String nameVorname = prefs.getString('nameVorname') ?? ""; + String addresse1 = prefs.getString('addresse1') ?? ""; setState(() { - widget.nameVornameC.text = nameVorname; + widget.addresse1C.text = addresse1; }); }); } @@ -425,21 +429,21 @@ class _NameVornameState extends State { flex: 2, child: TextField( decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.namevorname, - enabledBorder: widget.nameVornameC.text.isEmpty + hintText: AppLocalizations.of(context)!.adresse1, + enabledBorder: widget.addresse1C.text.isEmpty ? const UnderlineInputBorder( borderSide: BorderSide(color: Colors.red)) : const UnderlineInputBorder( borderSide: BorderSide(color: Colors.green)), - focusedBorder: widget.nameVornameC.text.isEmpty + focusedBorder: widget.addresse1C.text.isEmpty ? const UnderlineInputBorder( borderSide: BorderSide(color: Colors.red)) : const UnderlineInputBorder( borderSide: BorderSide(color: Colors.green)), ), - controller: widget.nameVornameC, + controller: widget.addresse1C, onChanged: (value) => setState(() { - widget.nameVornameC.text = value; + widget.addresse1C.text = value; }), )), Expanded( @@ -447,20 +451,20 @@ class _NameVornameState extends State { child: Align( alignment: Alignment.bottomLeft, child: FutureBuilder>>( - future: NameVorname, + future: Addresse1, builder: (BuildContext context, AsyncSnapshot>> snapshot) { if (snapshot.hasData) { return DropdownButton( items: snapshot.data! .map((item) => - buildMenuItem(item['NameVorname'].toString())) + buildMenuItem(item['Addresse1'].toString())) .toList(), onChanged: (value) { setState( () { selectedRudel = value; - widget.nameVornameC.text = value ?? ''; + widget.addresse1C.text = value ?? ''; }, ); }, @@ -486,25 +490,25 @@ class _NameVornameState extends State { ); } -// PLZOrt +// Addresse2 -class PLZOrt extends StatefulWidget { - final TextEditingController plzOrtC; +class Addresse2 extends StatefulWidget { + final TextEditingController addresse2C; - const PLZOrt({super.key, required this.plzOrtC}); + const Addresse2({super.key, required this.addresse2C}); @override - State createState() => _PLZOrtState(); + State createState() => _Addresse2State(); } -class _PLZOrtState extends State { +class _Addresse2State extends State { String? selectedRudel; - late Future>> PLZOrt; + late Future>> Addresse2; @override void initState() { super.initState(); - PLZOrt = DBHelper().getPlace(); + Addresse2 = DBHelper().getPlace(); } @override @@ -515,10 +519,10 @@ class _PLZOrtState extends State { flex: 2, child: TextField( decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.plzort), - controller: widget.plzOrtC, + hintText: AppLocalizations.of(context)!.adresse2), + controller: widget.addresse2C, onChanged: (value) => setState(() { - widget.plzOrtC.text = value; + widget.addresse2C.text = value; }), )), Expanded( @@ -526,19 +530,19 @@ class _PLZOrtState extends State { child: Align( alignment: Alignment.bottomLeft, child: FutureBuilder>>( - future: PLZOrt, + future: Addresse2, builder: (BuildContext context, AsyncSnapshot>> snapshot) { if (snapshot.hasData) { return DropdownButton( items: snapshot.data! - .map((item) => buildMenuItem(item['PLZOrt'].toString())) + .map((item) => buildMenuItem(item['Addresse2'].toString())) .toList(), onChanged: (value) { setState( () { selectedRudel = value; - widget.plzOrtC.text = value ?? ''; + widget.addresse2C.text = value ?? ''; }, ); }, @@ -564,25 +568,25 @@ class _PLZOrtState extends State { ); } -// EmailTel +// Addresse3 -class EmailTel extends StatefulWidget { - final TextEditingController emailTelC; +class Addresse3 extends StatefulWidget { + final TextEditingController addresse3C; - const EmailTel({super.key, required this.emailTelC}); + const Addresse3({super.key, required this.addresse3C}); @override - State createState() => _EmailTelState(); + State createState() => _Addresse3State(); } -class _EmailTelState extends State { +class _Addresse3State extends State { String? selectedRudel; - late Future>> EmailTel; + late Future>> Addresse3; @override void initState() { super.initState(); - EmailTel = DBHelper().getPlace(); + Addresse3 = DBHelper().getPlace(); } @override @@ -593,28 +597,28 @@ class _EmailTelState extends State { flex: 2, child: TextField( decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.emailtel), - controller: widget.emailTelC, + hintText: AppLocalizations.of(context)!.adresse3), + controller: widget.addresse3C, )), Expanded( flex: 1, child: Align( alignment: Alignment.bottomLeft, child: FutureBuilder>>( - future: EmailTel, + future: Addresse3, builder: (BuildContext context, AsyncSnapshot>> snapshot) { if (snapshot.hasData) { return DropdownButton( items: snapshot.data! .map((item) => - buildMenuItem(item['EmailTel'].toString())) + buildMenuItem(item['Addresse3'].toString())) .toList(), onChanged: (value) { setState( () { selectedRudel = value; - widget.emailTelC.text = value ?? ''; + widget.addresse3C.text = value ?? ''; }, ); }, @@ -659,7 +663,7 @@ class _BLandState extends State { void initState() { super.initState(); - _loadPref(); + if (widget.bLandC.text == "") _loadPref(); BLand = DBHelper().getPlace(); } @@ -949,7 +953,8 @@ class _OrtInfoState extends State { flex: 2, child: TextField( decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.ortinfo,), + hintText: AppLocalizations.of(context)!.ortinfo, + ), controller: widget.ortInfoC, onChanged: (value) => setState(() { widget.ortInfoC.text = value; @@ -1006,7 +1011,7 @@ class Status extends StatefulWidget { final String initialStatus; const Status( - {super.key, required this.onStatusChanged, this.initialStatus = 'aktiv'}); + {super.key, required this.onStatusChanged, this.initialStatus = 'Aktiv'}); @override State createState() => _StatusState(); @@ -1043,7 +1048,7 @@ class _StatusState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.inaktiv), leading: Radio( - value: 'inaktiv', + value: 'anaktiv', groupValue: _selectedStatus, onChanged: (value) { setState(() { @@ -1240,7 +1245,7 @@ class _PlatzungState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.kirrung), leading: Radio( - value: 'kirrung', + value: 'Kirrung', groupValue: _selectedPlatzung, onChanged: (value) { setState(() { @@ -1254,7 +1259,7 @@ class _PlatzungState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.wasserstelle), leading: Radio( - value: 'wasserstelle', + value: 'Wasserstelle', groupValue: _selectedPlatzung, onChanged: (value) { setState(() { @@ -1268,7 +1273,7 @@ class _PlatzungState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.wald), leading: Radio( - value: 'wald', + value: 'Wald', groupValue: _selectedPlatzung, onChanged: (value) { setState(() { @@ -1282,7 +1287,7 @@ class _PlatzungState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.wildwechsel), leading: Radio( - value: 'wildwechsel', + value: 'Wildwechsel', groupValue: _selectedPlatzung, onChanged: (value) { setState(() { @@ -1296,7 +1301,7 @@ class _PlatzungState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.wegstrasse), leading: Radio( - value: 'weg/straße', + value: 'Weg/Straße', groupValue: _selectedPlatzung, onChanged: (value) { setState(() { @@ -1310,7 +1315,7 @@ class _PlatzungState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.hofgarten), leading: Radio( - value: 'hof/garten', + value: 'Hof/Garten', groupValue: _selectedPlatzung, onChanged: (value) { setState(() { @@ -1324,7 +1329,7 @@ class _PlatzungState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.wiesefeld), leading: Radio( - value: 'wiese/feld/offenfläche', + value: 'Wiese/Feld/Offenfläche', groupValue: _selectedPlatzung, onChanged: (value) { setState(() { @@ -1371,7 +1376,7 @@ class _FotoFilmState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.foto), leading: Radio( - value: 'foto', + value: 'Foto', groupValue: _selectedFotoFilm, onChanged: (value) { setState(() { @@ -1385,7 +1390,7 @@ class _FotoFilmState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.film), leading: Radio( - value: 'film', + value: 'Film', groupValue: _selectedFotoFilm, onChanged: (value) { setState(() { @@ -1406,7 +1411,8 @@ class MEZ extends StatefulWidget { final Function(String) onMEZChanged; final String initialMEZ; - const MEZ({super.key, required this.onMEZChanged, this.initialMEZ = 'sommerzeit'}); + const MEZ( + {super.key, required this.onMEZChanged, this.initialMEZ = 'sommerzeit'}); @override State createState() => _MEZState(); @@ -1429,7 +1435,7 @@ class _MEZState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.sommerzeit), leading: Radio( - value: 'sommerzeit', + value: 'Sommerzeit', groupValue: _selectedMEZ, onChanged: (value) { setState(() { @@ -1443,7 +1449,7 @@ class _MEZState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.winterzeit), leading: Radio( - value: 'winterzeit', + value: 'Winterzeit', groupValue: _selectedMEZ, onChanged: (value) { setState(() { @@ -1543,7 +1549,7 @@ class Bearsafe extends StatefulWidget { const Bearsafe( {super.key, required this.onBearsafeChanged, - this.initialBearsafe = 'nein'}); + this.initialBearsafe = 'Nein'}); @override State createState() => _BearsafeState(); @@ -1566,7 +1572,7 @@ class _BearsafeState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.nein), leading: Radio( - value: 'nein', + value: 'Nein', groupValue: _selectedBearsafe, onChanged: (value) { setState(() { @@ -1580,7 +1586,7 @@ class _BearsafeState extends State { visualDensity: const VisualDensity(vertical: -4), title: Text(AppLocalizations.of(context)!.ja), leading: Radio( - value: 'ja', + value: 'Ja', groupValue: _selectedBearsafe, onChanged: (value) { setState(() { @@ -1613,20 +1619,23 @@ class _KontDatState extends State { Widget build(BuildContext context) { return Row( children: [ - Column(children: [ + Row(children: [ + SizedBox( + width: 125, + child: ElevatedButton( + onPressed: () async { + final date = await pickDate(); + if (date == null) return; + setState(() => kontDat = date); + }, + child: Text(AppLocalizations.of(context)!.pickkontdat)), + ), + const SizedBox( + width: 10, + ), Text( '${kontDat?.day}. ${kontDat?.month}. ${kontDat?.year}', ), - const SizedBox( - height: 8, - ), - ElevatedButton( - onPressed: () async { - final date = await pickDate(); - if (date == null) return; - setState(() => kontDat = date); - }, - child: Text(AppLocalizations.of(context)!.pickkontdat)), ]), ], ); @@ -1667,20 +1676,23 @@ class _AbbauDatState extends State { Widget build(BuildContext context) { return Row( children: [ - Column(children: [ + Row(children: [ + SizedBox( + width: 125, + child: ElevatedButton( + onPressed: () async { + final date = await pickDate(); + if (date == null) return; + setState(() => abbauDat = date); + }, + child: Text(AppLocalizations.of(context)!.pickabbaudat)), + ), + const SizedBox( + width: 10, + ), Text( '${abbauDat?.day}. ${abbauDat?.month}. ${abbauDat?.year}', ), - const SizedBox( - height: 8, - ), - ElevatedButton( - onPressed: () async { - final date = await pickDate(); - if (date == null) return; - setState(() => abbauDat = date); - }, - child: Text(AppLocalizations.of(context)!.pickabbaudat)), ]), ], ); @@ -2188,7 +2200,18 @@ class _AltStOrtState extends State { flex: 3, child: TextField( decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.altstort), + hintText: AppLocalizations.of(context)!.altstort, + enabledBorder: widget.altStOrtC.text.isEmpty + ? const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.red)) + : const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.green)), + focusedBorder: widget.altStOrtC.text.isEmpty + ? const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.red)) + : const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.green)), + ), controller: widget.altStOrtC, )), Expanded( @@ -2253,7 +2276,20 @@ class _AusVonState extends State { Widget build(BuildContext context) { return Row( children: [ - Column(children: [ + Row(children: [ + SizedBox( + width: 125, + child: ElevatedButton( + onPressed: () async { + final date = await pickDate(); + if (date == null) return; + setState(() => ausVon = date); + }, + child: Text(AppLocalizations.of(context)!.ausvon)), + ), + const SizedBox( + width: 10, + ), Builder(builder: (context) { if (ausVon != null) { return Text('${ausVon?.day}. ${ausVon?.month}. ${ausVon?.year}'); @@ -2261,16 +2297,6 @@ class _AusVonState extends State { return Text(AppLocalizations.of(context)!.nichts); } }), - const SizedBox( - height: 8, - ), - ElevatedButton( - onPressed: () async { - final date = await pickDate(); - if (date == null) return; - setState(() => ausVon = date); - }, - child: Text(AppLocalizations.of(context)!.ausvon)), ]), ], ); @@ -2311,7 +2337,20 @@ class _AusBisState extends State { Widget build(BuildContext context) { return Row( children: [ - Column(children: [ + Row(children: [ + SizedBox( + width: 125, + child: ElevatedButton( + onPressed: () async { + final date = await pickDate(); + if (date == null) return; + setState(() => ausBis = date); + }, + child: Text(AppLocalizations.of(context)!.ausbis)), + ), + const SizedBox( + width: 10, + ), Builder(builder: (context) { if (ausBis != null) { return Text('${ausBis?.day}. ${ausBis?.month}. ${ausBis?.year}'); @@ -2319,16 +2358,6 @@ class _AusBisState extends State { return Text(AppLocalizations.of(context)!.nichts); } }), - const SizedBox( - height: 8, - ), - ElevatedButton( - onPressed: () async { - final date = await pickDate(); - if (date == null) return; - setState(() => ausBis = date); - }, - child: Text(AppLocalizations.of(context)!.ausbis)), ]), ], ); @@ -2515,16 +2544,16 @@ class _IntKommState extends State { // KontSum -class KontSum extends StatefulWidget { - final TextEditingController kontSumC; +class Betreuung extends StatefulWidget { + final TextEditingController betreuungC; - const KontSum({super.key, required this.kontSumC}); + const Betreuung({super.key, required this.betreuungC}); @override - State createState() => _KontSumState(); + State createState() => _BetreuungState(); } -class _KontSumState extends State { +class _BetreuungState extends State { String? selectedRudel; late Future>> KontSum; @@ -2542,8 +2571,8 @@ class _KontSumState extends State { flex: 3, child: TextField( decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.kontsum), - controller: widget.kontSumC, + hintText: AppLocalizations.of(context)!.betreuung), + controller: widget.betreuungC, )), Expanded( flex: 1, @@ -2563,7 +2592,7 @@ class _KontSumState extends State { setState( () { selectedRudel = value; - widget.kontSumC.text = value ?? ''; + widget.betreuungC.text = value ?? ''; }, ); }, diff --git a/lib/db_helper.dart b/lib/db_helper.dart index 2fac8bc..adac89a 100644 --- a/lib/db_helper.dart +++ b/lib/db_helper.dart @@ -31,9 +31,9 @@ class DBHelper { // The function that helps _onCreatePlace(Database placeDB, int version) async { await placeDB.execute( - 'CREATE TABLE place (id INTEGER PRIMARY KEY, CID TEXT UNIQUE, Standort TEXT, Rudel TEXT, Datum DATE, NameVorname TEXT, PLZOrt TEXT, EmailTel TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, KontSum TEXT, AbbauDat DATE, Auftrag TEXT, Absprachen TEXT, SonstBemerkungen TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, AltStOrt, AusVon DATE, AusBis DATE, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, Sent INTEGER DEFAULT 0)'); + 'CREATE TABLE place (id INTEGER PRIMARY KEY, CID TEXT UNIQUE, Standort TEXT, Rudel TEXT, Datum DATE, Adresse1 TEXT, Adresse2 TEXT, Adresse3 TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, Betreuung TEXT, AbbauDat DATE, Auftrag TEXT, KontAbsp TEXT, SonstBem TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, AusVon DATE, AusBis DATE, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8), Sent INTEGER DEFAULT 0)'); await placeDB.execute( - 'CREATE TABLE templates (id INTEGER PRIMARY KEY, CID TEXT UNIQUE, Standort TEXT, Rudel TEXT, Datum DATE, NameVorname TEXT, PLZOrt TEXT, EmailTel TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, KontSum TEXT, AbbauDat DATE, Auftrag TEXT, Absprachen TEXT, SonstBemerkungen TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, AltStOrt TEXT, AusVon DATE, AusBis DATE, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT)'); + 'CREATE TABLE templates (id INTEGER PRIMARY KEY, CID TEXT UNIQUE, Standort TEXT, Rudel TEXT, Datum DATE, Adresse1 TEXT, Adresse2 TEXT, Adresse3 TEXT, BLand TEXT, Lkr TEXT, BeiOrt TEXT, OrtInfo TEXT, Status TEXT, STTyp TEXT, FFTyp TEXT, FotoFilm TEXT, MEZ TEXT, Platzung TEXT, KSchloNr TEXT, Bearsafe TEXT, KontDat DATE, Betreuung TEXT, AbbauDat DATE, Auftrag TEXT, KontAbsp TEXT, SonstBem TEXT, FKontakt1 TEXT, FKontakt2 TEXT, FKontakt3 TEXT, AusVon DATE, AusBis DATE, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8))'); } diff --git a/lib/intro_screen.dart b/lib/intro_screen.dart index 74a8aa0..ac6b308 100644 --- a/lib/intro_screen.dart +++ b/lib/intro_screen.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -11,14 +10,33 @@ class IntroScreen extends StatefulWidget { } class _IntroScreenState extends State { - TextEditingController nameVornameC = TextEditingController(); + TextEditingController addresse1C = TextEditingController(); TextEditingController bLandC = TextEditingController(); + TextEditingController apiAddress = TextEditingController(); Future _saveData() async { SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.setString('nameVorname', nameVornameC.text); + await prefs.setString('addresse1', addresse1C.text); await prefs.setString('bLand', bLandC.text); await prefs.setBool('isFirstLaunch', false); + await prefs.setString('apiAddress', apiAddress.text); + } + + @override + void initState() { + super.initState(); + _loadPrefs(); + } + + void _loadPrefs() { + Future.delayed(Duration.zero, () async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + setState(() { + apiAddress.text = prefs.getString('apiAddress') ?? ""; + addresse1C.text = prefs.getString('addresse1') ?? ""; + bLandC.text = prefs.getString('bLand') ?? ""; + }); + }); } @override @@ -34,10 +52,10 @@ class _IntroScreenState extends State { children: [ TextField( decoration: InputDecoration( - hintText: AppLocalizations.of(context)!.namevorname), - controller: nameVornameC, + hintText: AppLocalizations.of(context)!.benutzername), + controller: addresse1C, onChanged: (value) => setState(() { - nameVornameC.text = value; + addresse1C.text = value; }), ), const SizedBox( @@ -45,8 +63,8 @@ class _IntroScreenState extends State { ), Column( children: [ - DropdownButton( - hint: Text(bLandC.text), + DropdownButton( + hint: Text(bLandC.text), items: const [ DropdownMenuItem( value: 'Baden-Württemberg', @@ -118,10 +136,18 @@ class _IntroScreenState extends State { bLandC.text = value!; }); }, - ), - TextField( - controller: bLandC, - ), + ), + TextField( + controller: bLandC, + ), + const SizedBox( + height: 15, + ), + TextField( + decoration: InputDecoration( + hintText: AppLocalizations.of(context)!.apiaddress), + controller: apiAddress, + ) ], ), const SizedBox( diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 352f61b..dacbf13 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -1,22 +1,21 @@ { - "homePageTitle": "FFOrte", + "homePageTitle": "Wildtiermonitoring", "addplace": "Standort hinzufügen", "completed": "Vollständig", "uncompleted": "Unvollständig", "deleteEverything": "Alles löschen?", "deleteEverythingContent": "Alle Standorte werden lokal gelöscht!", "camLink": "ID der Kamera", - "firstStep": "STANDORT, KAMERA, TERRITORIUM", "secondStep": "DATUM, KONTAKT, ORT", - "date": "DATUM", - "kontakt": "KONTAKT", + "date": "DATUM, AUFBAU, KONTROLLE", + "kontakt": "KONTAKT, ANSPRECHPARTNER", "status": "Status", "viewplacesappbar": "Standorte ansehen", - "locations": "STANDORT", + "locations": "ORT, UMGEBUNG", "rudel": "Territorium", - "namevorname": "Name", - "plzort": "PLZ und Ort", - "emailtel": "Email und/oder Telefon", + "adresse1": "Adresse 1", + "adresse2": "Adresse 2", + "adresse3": "Adresse 3", "bland": "Bundesland", "lkr": "Landkreis", "beiort": "Bei Ort", @@ -39,26 +38,26 @@ "kschlonr": "KSchloss Nummer", "nein": "Nein", "ja": "Ja", - "pickkontdat": "Datum Kontrolle", - "pickabbaudat": "Datum Abbau", + "pickkontdat": "Kontrolle", + "pickabbaudat": "Abbau", "platzung": "Platzierung", "zeiteinstellung": "Zeiteinstellung", "auftrag": "Auftrag", "absprachen": "Absprachen", "sonstbemerkungen": "Sonstige Bemerkungen", - "fkontakt1": "FKontakt 1", - "fkontakt2": "FKontakt 2", - "fkontakt3": "FKontakt 3", + "fkontakt1": "Kontakt für Fläche", + "fkontakt2": "Kontakt Eigentümer", + "fkontakt3": "Kontakt Revier/Jagd", "hofgarten": "Hof/Garten", "altstort": "Standort", - "wiesefeld": "Wiese/Feld/offenfläche", - "ausvon": "Aus von", + "wiesefeld": "Wiese/Feld/Offenfläche", + "ausvon": "Ausfall von", "nichts": "---", - "ausbis": "Aus Bis", - "ktage1": "KTage 1", - "ktage2": "KTage 2", + "ausbis": "Ausfall bis", + "ktage1": "Kontrollintervall (Tage 1)", + "ktage2": "Kontrollintervall (Tage 2)", "eugrid": "EUGrid", - "pickDate": "Datum Aufstellung", + "pickDate": "Aufstellung", "pickTime": "Zeit auswählen", "delAll": "Alle Standorte löschen", "fieldEmpty": "Folgendes Feld ist leer:", @@ -70,7 +69,7 @@ "locationForbidden": "Zugriff auf Standort verweigert. Es ist empfohlen dies zu erlauben", "map": "Karte", "markerSet": "Marker gesetzt auf", - "kontsum": "Kontrollsumme", + "betreuung": "Betreuung", "bearsafe": "Bearsafe", "sttyp": "Wahl des Standortes", "ort": "Ort", @@ -81,5 +80,7 @@ "sendtoserver": "Zum Server senden", "savemethod": "Speichermethode auswählen", "viewplaces": "Standorte anzeigen", - "showloginscreen": "Login-Bildschirm Anzeigen" + "showloginscreen": "Login-Bildschirm Anzeigen", + "apiaddress": "Api-Adresse", + "benutzername": "Benutzername" } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index aa09220..c37e136 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -1,5 +1,5 @@ { - "homePageTitle": "FFOrte", + "homePageTitle": "wildlife monitoring", "@homePageTitle": { "description": "The title of the homepage" }, @@ -32,7 +32,7 @@ "description": "title first step" }, - "date": "Date", + "date": "Installation and control date ", "@date": { "description": "date step" }, @@ -55,7 +55,7 @@ "@viewplacesappbar": { "description": "view places appbar" }, - "locations": "Location", + "locations": "Place, neighbouhood", "@locations": { "description": "Location textfield" }, @@ -63,18 +63,18 @@ "@rudel": { "description": "Rudel textfield" }, - "namevorname": "Name", - "@namevorname": { - "description": "Name Vorname textfield" + "adresse1": "Address 1", + "@adresse1": { + "description": "Address 1 textfield" }, - "plzort": "Postal code and town", - "@plzort": { - "description": "PLZ Ort textfield" + "adresse2": "Address 2", + "@adresse2": { + "description": "Address 2 textfield" }, - "emailtel": "Email and/or Phone", - "@emailtel": { - "description": "email or phone textfield" + "adresse3": "Address 3", + "@adresse3": { + "description": "adress3 textfield" }, "bland": "State", @@ -182,12 +182,12 @@ "description": "yes radiobutton" }, - "pickkontdat": "Pick KontDat", + "pickkontdat": "Control", "@pickkontdat": { "description": "pickkontdat button" }, - "pickabbaudat": "Pick Disamble Date", + "pickabbaudat": "Disamble", "@abbaudat": { "description": "pickabbaudat button" }, @@ -272,9 +272,9 @@ "description": "intkomm textfield" }, - "kontsum": "Control sum", - "@kontsum": { - "description": "kontsum textfield" + "betreuung": "Care", + "@betreuung": { + "description": "Betreuung textfield" }, "hofgarten": "Yard/Garden", @@ -291,7 +291,7 @@ "@eugrid": { "description": "EUGrid textfield" }, - "pickDate": "Pick Date", + "pickDate": "Installation", "@pickDate": { "description": "Pick date button" }, @@ -388,6 +388,16 @@ "showloginscreen": "Show login Screen", "@showloginscreen": { "description": "show login screen popup menu item" + }, + + "apiaddress": "Api-address", + "@apiaddress": { + "description": "api address hint" + }, + + "benutzername": "Username", + "@benutzername": { + "description": "intro screen benutzername hint" } } \ No newline at end of file diff --git a/lib/settings.dart b/lib/settings.dart index 1c1e38f..3fc3000 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:shared_preferences/shared_preferences.dart'; class Settings extends StatefulWidget { const Settings({super.key}); @@ -10,98 +8,8 @@ class Settings extends StatefulWidget { } class _SettingsState extends State { - late Future initName; - late Future initBLand; - TextEditingController nameVornameC = TextEditingController(); - TextEditingController bLandC = TextEditingController(); - - @override - void initState() { - super.initState(); - initName = _loadName(); - initBLand = _loadBLand(); - } - - Future _loadName() { - Future initName = Future.delayed(Duration.zero, () async { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - final String initName = prefs.getString('nameVorname') ?? ''; - nameVornameC.text = initName; - return initName; - }); - return initName; - } - - Future _loadBLand() { - Future initBLand = Future.delayed(Duration.zero, () async { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - final String initBLand = prefs.getString('bLand') ?? ''; - bLandC.text = initBLand; - return initBLand; - }); - return initBLand; - } - - void _saveName() async { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.setString('nameVorname', nameVornameC.text); - } - - void _saveBLand() async { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.setString('bLand', bLandC.text); - } - @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text(AppLocalizations.of(context)!.settings)), - body: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - children: [ - Text(AppLocalizations.of(context)!.changenamestate ,style: const TextStyle(fontSize: 20, ),), - FutureBuilder( - future: initName, // your Future - builder: - (BuildContext context, AsyncSnapshot snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - return TextField( - controller: nameVornameC, - decoration: InputDecoration( - labelText: AppLocalizations.of(context)!.namevorname, - ), - ); - } else { - // Optionally, return a placeholder widget while waiting - return const CircularProgressIndicator(); - } - }, - ), - FutureBuilder( - future: initBLand, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.done) { - return TextField( - controller: bLandC, - decoration: InputDecoration(labelText: AppLocalizations.of(context)!.bland), - ); - } else { - return const CircularProgressIndicator(); - } - }, - ) - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.save), - onPressed: () { - _saveName(); - _saveBLand(); - }), - ); + return const Placeholder(); } -} +} \ No newline at end of file diff --git a/lib/viewCam/view_cams.dart b/lib/viewCam/view_cams.dart index ddf1353..f84fc46 100644 --- a/lib/viewCam/view_cams.dart +++ b/lib/viewCam/view_cams.dart @@ -201,11 +201,11 @@ class _ViewCamsState extends State { Text( '${AppLocalizations.of(context)!.sommerzeit}: ${place['MEZ']}'), Text( - '${AppLocalizations.of(context)!.kontsum}: ${place['KontSum']}'), + '${AppLocalizations.of(context)!.betreuung}: ${place['Betreuung']}'), Text( '${AppLocalizations.of(context)!.locations}: ${place['Standort']}'), Text( - '${AppLocalizations.of(context)!.plzort}: ${place['PLZOrt']}'), + '${AppLocalizations.of(context)!.adresse3}: ${place['PLZOrt']}'), Text( '${AppLocalizations.of(context)!.bland}: ${place['BLand']}'), Text( @@ -217,9 +217,9 @@ class _ViewCamsState extends State { Text( '${AppLocalizations.of(context)!.altstort}: ${place['AltStOrt']}'), Text( - '${AppLocalizations.of(context)!.namevorname}: ${place['NameVorname']}'), + '${AppLocalizations.of(context)!.adresse1}: ${place['NameVorname']}'), Text( - '${AppLocalizations.of(context)!.emailtel}: ${place['EmailTel']}'), + '${AppLocalizations.of(context)!.adresse2}: ${place['EmailTel']}'), Text( '${AppLocalizations.of(context)!.auftrag}: ${place['Auftrag']}'), Text( diff --git a/time.txt b/time.txt index a27f95b..0d167c6 100644 --- a/time.txt +++ b/time.txt @@ -42,4 +42,5 @@ - abgerechnet - 16 mär 4h -20 mär 6h 15 min \ No newline at end of file +20 mär 6h 15 min +21 mär 4h 15 min \ No newline at end of file diff --git a/untranslated.txt b/untranslated.txt index 9e26dfe..1ebadea 100644 --- a/untranslated.txt +++ b/untranslated.txt @@ -1 +1,5 @@ -{} \ No newline at end of file +{ + "de": [ + "firstStep" + ] +}