From 3e3113c1cc524519ae9a865476b7402f649b8033 Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 9 May 2024 10:30:40 +0200 Subject: [PATCH 1/4] fixed empty screens when reopening an entry --- lib/addCam/add_cam_main.dart | 60 +++++++++++++++++------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/lib/addCam/add_cam_main.dart b/lib/addCam/add_cam_main.dart index 5ce6f3c..160c752 100644 --- a/lib/addCam/add_cam_main.dart +++ b/lib/addCam/add_cam_main.dart @@ -74,8 +74,8 @@ class _AddCamMainState extends State { DateTime? abbauDat; DateTime datum = DateTime.now(); - DateTime kontDat = DateTime.now(); - DateTime protoAm = DateTime.now(); + DateTime? kontDat = DateTime.now(); + DateTime? protoAm = DateTime.now(); Map getPlace() { Map place = { @@ -169,38 +169,36 @@ class _AddCamMainState extends State { // 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']; + 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 = 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']; + kontDat = widget.existingData!['KontDat'] == null ? null : DateTime.parse(widget.existingData!['KontDat']); + abbauDat = widget.existingData!['AbbauDat'] == null ? 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 = DateTime.parse(widget.existingData!['ProtoAm']); - intKommC.text = widget.existingData!['IntKomm']; - betreuungC.text = widget.existingData!['Betreuung']; + protoAm = widget.existingData!['ProtoAm'] == null ? null : DateTime.parse(widget.existingData!['ProtoAm']); + intKommC.text = widget.existingData!['IntKomm'] ?? ""; + betreuungC.text = widget.existingData!['Betreuung'] ?? ""; } } From ec03b32ce6ffdea9dc6d9b460922dbe5ed9db12a Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 9 May 2024 11:12:39 +0200 Subject: [PATCH 2/4] fixed dates --- lib/addCam/add_cam_main.dart | 113 ++++++++++++++++++++--------------- lib/addCam/cam_widgets.dart | 82 ++++++++++++++----------- 2 files changed, 113 insertions(+), 82 deletions(-) diff --git a/lib/addCam/add_cam_main.dart b/lib/addCam/add_cam_main.dart index 160c752..16cb54b 100644 --- a/lib/addCam/add_cam_main.dart +++ b/lib/addCam/add_cam_main.dart @@ -185,8 +185,12 @@ class _AddCamMainState extends State { selectedPlatzung = widget.existingData!['Platzung'] ?? ""; kSchloNrC.text = widget.existingData!['KSchloNr'] ?? ""; datum = DateTime.parse(widget.existingData!['Datum']); - kontDat = widget.existingData!['KontDat'] == null ? null : DateTime.parse(widget.existingData!['KontDat']); - abbauDat = widget.existingData!['AbbauDat'] == null ? null : DateTime.parse(widget.existingData!['AbbauDat']); + kontDat = widget.existingData!['KontDat'] == null + ? null + : DateTime.parse(widget.existingData!['KontDat']); + abbauDat = widget.existingData!['AbbauDat'] == null + ? null + : DateTime.parse(widget.existingData!['AbbauDat']); auftragC.text = widget.existingData!['Auftrag'] ?? ""; kontAbspC.text = widget.existingData!['KontAbsp'] ?? ""; sonstBemC.text = widget.existingData!['SonstBem'] ?? ""; @@ -196,7 +200,9 @@ class _AddCamMainState extends State { 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']); + protoAm = widget.existingData!['ProtoAm'] == null + ? null + : DateTime.parse(widget.existingData!['ProtoAm']); intKommC.text = widget.existingData!['IntKomm'] ?? ""; betreuungC.text = widget.existingData!['Betreuung'] ?? ""; } @@ -240,8 +246,6 @@ class _AddCamMainState extends State { actions: [ TextButton( onPressed: () async { - - int errorCode = _httpRequest(); if (errorCode != 201) { @@ -279,7 +283,6 @@ class _AddCamMainState extends State { child: Text(AppLocalizations.of(context)!.template)), TextButton( onPressed: () async { - int errorCode = _httpRequest(); if (errorCode != 201) { @@ -341,7 +344,6 @@ class _AddCamMainState extends State { } int _httpRequest() { - Map place = getPlace(); Methods method = Methods(); @@ -566,47 +568,47 @@ class _AddCamMainState extends State { children: [ Column( children: [ - Text(currentPosition.latitude.toString()), - - Text(currentPosition.longitude.toString()), - + Text(currentPosition.latitude.toString()), + Text(currentPosition.longitude.toString()), ], ), - const SizedBox(width: 15,), - ElevatedButton( - onPressed: () async { - final result = await Navigator.of(context) - .push( - MaterialPageRoute(builder: (context) { - return Karte( - ortInfoC: ortInfoC, - beiOrtC: beiOrtC, - currentPosition: currentPosition, - onPositionChange: (updatedPosition) { - setState(() { - currentPosition = updatedPosition; - }); - }, - ); - })); - if (result != null) { - setState(() { - currentPosition = Position( - latitude: result.latitude, - longitude: result.longitude, - timestamp: DateTime.now(), - accuracy: 0.0, - altitude: 0.0, - altitudeAccuracy: 0.0, - heading: 0.0, - headingAccuracy: 0.0, - speed: 0.0, - speedAccuracy: 0.0, + const SizedBox( + width: 15, + ), + ElevatedButton( + onPressed: () async { + final result = await Navigator.of(context) + .push( + MaterialPageRoute(builder: (context) { + return Karte( + ortInfoC: ortInfoC, + beiOrtC: beiOrtC, + currentPosition: currentPosition, + onPositionChange: (updatedPosition) { + setState(() { + currentPosition = updatedPosition; + }); + }, ); - }); - } - }, - child: Text(AppLocalizations.of(context)!.openMap)), + })); + if (result != null) { + setState(() { + currentPosition = Position( + latitude: result.latitude, + longitude: result.longitude, + timestamp: DateTime.now(), + accuracy: 0.0, + altitude: 0.0, + altitudeAccuracy: 0.0, + heading: 0.0, + headingAccuracy: 0.0, + speed: 0.0, + speedAccuracy: 0.0, + ); + }); + } + }, + child: Text(AppLocalizations.of(context)!.openMap)), ], ), VarTextField( @@ -661,9 +663,19 @@ class _AddCamMainState extends State { content: Column( children: [ Datum( - datum: datum, + initDatum: datum, + onDateChanged: (value) { + datum = value; + }, + ), + KontDat( + initKontDat: kontDat, + onDateChanged: (value) { + setState(() { + kontDat = value; + }); + }, ), - KontDat(kontDat: kontDat), const SizedBox( height: 20, ), @@ -712,7 +724,12 @@ class _AddCamMainState extends State { ), Row( children: [ - AbbauDat(abbauDat: abbauDat), + AbbauDat( + initAbbauDat: abbauDat, + onDateChanged: (value) { + abbauDat = value; + }, + ), ], ), const SizedBox( diff --git a/lib/addCam/cam_widgets.dart b/lib/addCam/cam_widgets.dart index 8ef94bd..830e7aa 100644 --- a/lib/addCam/cam_widgets.dart +++ b/lib/addCam/cam_widgets.dart @@ -155,14 +155,15 @@ class Karte extends StatefulWidget { {super.key, required this.currentPosition, required this.onPositionChange, - required this.beiOrtC, required this.ortInfoC}); + required this.beiOrtC, + required this.ortInfoC}); @override KarteState createState() => KarteState(); } class KarteState extends State { - List markers = [ ]; + List markers = []; LatLng? selectedPosition; Position? updatedPosition; bool saveVisible = false; @@ -197,7 +198,7 @@ class KarteState extends State { List placemarks = await placemarkFromCoordinates( selectedPosition!.latitude, selectedPosition!.longitude); - print(placemarks); + print(placemarks); if (selectedPosition != null) { setState(() { @@ -293,16 +294,23 @@ class KarteState extends State { // datum is the variable where the chosen date is stored class Datum extends StatefulWidget { - final DateTime? datum; + final DateTime? initDatum; + final Function(DateTime) onDateChanged; - const Datum({super.key, required this.datum}); + const Datum({super.key, required this.initDatum, required this.onDateChanged}); @override State createState() => _DatumState(); } class _DatumState extends State { - DateTime? datum = DateTime.now(); + DateTime? datum; + + @override + void initState() { + super.initState(); + datum = widget.initDatum; + } @override Widget build(BuildContext context) { @@ -316,6 +324,7 @@ class _DatumState extends State { final date = await pickDate(); if (date == null) return; setState(() => datum = date); + widget.onDateChanged(date); }, child: Text(AppLocalizations.of(context)!.pickDate)), ), @@ -336,14 +345,8 @@ class _DatumState extends State { initialDate: datum!, firstDate: DateTime(2000), lastDate: DateTime(5000)); - if (date == null) return null; - setState(() => datum = date); - var place = {'Datum': DateFormat('yyyy-MM-dd').format(datum!)}; - - await DBHelper().addPlace(place); - - return datum; + return date; } } @@ -473,11 +476,11 @@ class Platzung extends StatefulWidget { final Function(String) onPlatzungChanged; final String? initialPlatzung; - - const Platzung( - {super.key, - required this.onPlatzungChanged, this.initialPlatzung, - }); + const Platzung({ + super.key, + required this.onPlatzungChanged, + this.initialPlatzung, + }); @override State createState() => _PlatzungState(); @@ -494,7 +497,6 @@ class _PlatzungState extends State { } } - @override Widget build(BuildContext context) { return Column( @@ -725,16 +727,24 @@ class _MEZState extends State { // KontDat class KontDat extends StatefulWidget { - final DateTime? kontDat; + final DateTime? initKontDat; + final Function(DateTime) onDateChanged; - const KontDat({super.key, required this.kontDat}); + const KontDat( + {super.key, required this.initKontDat, required this.onDateChanged}); @override State createState() => _KontDatState(); } class _KontDatState extends State { - DateTime? kontDat = DateTime.now(); + DateTime? kontDat; + + @override + void initState() { + super.initState(); + kontDat = widget.initKontDat; + } @override Widget build(BuildContext context) { @@ -747,7 +757,10 @@ class _KontDatState extends State { onPressed: () async { final date = await pickDate(); if (date == null) return; - setState(() => kontDat = date); + setState(() { + kontDat = date; + }); + widget.onDateChanged(date); }, child: Text(AppLocalizations.of(context)!.pickkontdat)), ), @@ -765,26 +778,21 @@ class _KontDatState extends State { Future pickDate() async { final date = await showDatePicker( context: context, - initialDate: kontDat!, + initialDate: kontDat ?? DateTime.now(), firstDate: DateTime(2000), lastDate: DateTime(5000)); - if (date == null) return null; - setState(() => kontDat = date); - var place = {'KontDat': DateFormat('yyyy-MM-dd').format(kontDat!)}; - - await DBHelper().addPlace(place); - - return kontDat; + return date; } } // AbbauDat class AbbauDat extends StatefulWidget { - final DateTime? abbauDat; + final DateTime? initAbbauDat; + final Function(DateTime) onDateChanged; - const AbbauDat({super.key, required this.abbauDat}); + const AbbauDat({super.key, required this.initAbbauDat, required this.onDateChanged}); @override State createState() => _AbbauDatState(); @@ -793,6 +801,12 @@ class AbbauDat extends StatefulWidget { class _AbbauDatState extends State { DateTime? abbauDat; + @override + void initState() { + super.initState(); + abbauDat = widget.initAbbauDat; + } + @override Widget build(BuildContext context) { return Row( @@ -805,6 +819,7 @@ class _AbbauDatState extends State { final date = await pickDate(); if (date == null) return; setState(() => abbauDat = date); + widget.onDateChanged(date); }, child: Text(AppLocalizations.of(context)!.pickabbaudat)), ), @@ -841,7 +856,6 @@ class _AbbauDatState extends State { firstDate: DateTime(2000), lastDate: DateTime(5000)); if (date == null) return null; - setState(() => abbauDat = date); return abbauDat; } From 640f5b6c66d0a660403096e7c49720b6aa404126 Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 9 May 2024 11:30:54 +0200 Subject: [PATCH 3/4] fixed context across async gaps --- lib/addCam/add_cam_main.dart | 40 +++++++++++++++--------------------- lib/addCam/cam_widgets.dart | 3 +-- lib/other/methods.dart | 4 ++-- time.txt | 1 + 4 files changed, 20 insertions(+), 28 deletions(-) diff --git a/lib/addCam/add_cam_main.dart b/lib/addCam/add_cam_main.dart index 16cb54b..7e07d12 100644 --- a/lib/addCam/add_cam_main.dart +++ b/lib/addCam/add_cam_main.dart @@ -121,14 +121,15 @@ class _AddCamMainState extends State { // determine live position with checks for denied permission and turned off location service Future _deteterminePosition() async { + + + bool locationEnabled; LocationPermission permissionGiven; locationEnabled = await Geolocator.isLocationServiceEnabled(); - if (!locationEnabled) { - // ignore: use_build_context_synchronously + if (!locationEnabled && mounted) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // ignore: use_build_context_synchronously content: Text(AppLocalizations.of(context)!.locationDisabled))); return currentPosition; } @@ -136,20 +137,16 @@ class _AddCamMainState extends State { permissionGiven = await Geolocator.checkPermission(); if (permissionGiven == LocationPermission.denied) { permissionGiven = await Geolocator.requestPermission(); - if (permissionGiven == LocationPermission.denied) { - // ignore: use_build_context_synchronously + if (permissionGiven == LocationPermission.denied && mounted) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // ignore: use_build_context_synchronously content: Text(AppLocalizations.of(context)!.locationForbidden))); return currentPosition; } } - if (permissionGiven == LocationPermission.deniedForever) { - // ignore: use_build_context_synchronously + if (permissionGiven == LocationPermission.deniedForever && mounted) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // ignore: use_build_context_synchronously content: Text(AppLocalizations.of(context)!.locationForbidden))); return currentPosition; } @@ -275,7 +272,6 @@ class _AddCamMainState extends State { onPressed: () async { saveTemplate(); Navigator.pushNamedAndRemoveUntil( - // ignore: use_build_context_synchronously context, '/home', (route) => false); @@ -320,14 +316,12 @@ class _AddCamMainState extends State { onPressed: () async { saveData(); saveFile(); - // ignore: use_build_context_synchronously }, child: Text(AppLocalizations.of(context)!.saveasfile)), TextButton( onPressed: () { saveData(); Navigator.pushNamedAndRemoveUntil( - // ignore: use_build_context_synchronously context, '/home', (route) => false); @@ -360,36 +354,34 @@ class _AddCamMainState extends State { String jsonPlace = jsonEncode(place); if (selectedDirectory == null) { - // ignore: use_build_context_synchronously - Navigator.pop(context); + if (mounted) Navigator.pop(context); return; } await prefs.setString('saveDir', selectedDirectory); - // ignore: use_build_context_synchronously File file = File( - '$selectedDirectory/${AppLocalizations.of(context)!.justplace}-${standortC.text}.txt'); + '$selectedDirectory/${mounted ? AppLocalizations.of(context)!.justplace : const Text('')}-${standortC.text}.txt'); try { await file.writeAsString(jsonPlace); } catch (e) { - // ignore: use_build_context_synchronously + if (mounted) { Navigator.pop(context); - // ignore: use_build_context_synchronously ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // ignore: use_build_context_synchronously - content: Text(AppLocalizations.of(context)!.savefilefailed))); + content: Text(AppLocalizations.of(context)!.savefilefailed))); } return; } - // ignore: use_build_context_synchronously - ScaffoldMessenger.of(context).showSnackBar( + if (mounted) { + ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Datei gespeichert in $selectedDirectory'))); + } - Navigator.pushNamedAndRemoveUntil( - // ignore: use_build_context_synchronously + if (mounted) { + Navigator.pushNamedAndRemoveUntil( context, '/home', (route) => false); + } } // checks if required fields are not empty. If one is the name will be returned diff --git a/lib/addCam/cam_widgets.dart b/lib/addCam/cam_widgets.dart index 830e7aa..cbddf6c 100644 --- a/lib/addCam/cam_widgets.dart +++ b/lib/addCam/cam_widgets.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:geolocator/geolocator.dart'; -import 'package:intl/intl.dart'; import 'package:latlong2/latlong.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:geocoding/geocoding.dart'; @@ -198,7 +197,7 @@ class KarteState extends State { List placemarks = await placemarkFromCoordinates( selectedPosition!.latitude, selectedPosition!.longitude); - print(placemarks); + // print(placemarks); if (selectedPosition != null) { setState(() { diff --git a/lib/other/methods.dart b/lib/other/methods.dart index f831cfb..1949dff 100644 --- a/lib/other/methods.dart +++ b/lib/other/methods.dart @@ -32,11 +32,11 @@ class Methods { // ignore: unused_catch_clause } on DioException catch (e) { _errorCode = response.statusCode; - print('is hier. var: ${_errorCode}'); + print('is hier. var: $_errorCode'); return; } _errorCode = response.statusCode; - print('is hier 2. var: ${_errorCode}'); + print('is hier 2. var: $_errorCode'); } } diff --git a/time.txt b/time.txt index 1d1d73c..49c5531 100644 --- a/time.txt +++ b/time.txt @@ -52,3 +52,4 @@ 30 apr 4h 15 min 1 mai 6h 8 mai 4h 30 min +9 mai 1h From 51524321a3b0f98906ac0830ba32da4a441983d9 Mon Sep 17 00:00:00 2001 From: nico Date: Thu, 9 May 2024 11:33:01 +0200 Subject: [PATCH 4/4] time --- time.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time.txt b/time.txt index 49c5531..270e329 100644 --- a/time.txt +++ b/time.txt @@ -52,4 +52,4 @@ 30 apr 4h 15 min 1 mai 6h 8 mai 4h 30 min -9 mai 1h +9 mai 1h 20 min