sitzung luc

This commit is contained in:
nico
2024-03-21 21:22:29 +01:00
parent bfabdee84b
commit d1ce04d2d0
11 changed files with 444 additions and 579 deletions

View File

@@ -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<AddCamMain> {
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<AddCamMain> {
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<AddCamMain> {
DateTime kontDat = DateTime.now();
DateTime protoAm = DateTime.now();
Map<String, dynamic> getPlace() {
Map<String, dynamic> 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<AddCamMain> {
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<AddCamMain> {
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<AddCamMain> {
}
void _httpRequest() async {
Map<String, dynamic> 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<String, dynamic> 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<AddCamMain> {
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<AddCamMain> {
Future<void> saveFile() async {
String? selectedDirectory = await FilePicker.platform.getDirectoryPath();
Map<String, dynamic> 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<AddCamMain> {
Map<String, TextEditingController> fields = {
'CID': id,
'Rudel': rudelC,
'NameVorname': nameVornameC,
'Addresse1': addresse1C,
'BLand': bLandC,
'Lkr': lkrC,
'BeiOrt': beiOrtC,
@@ -370,6 +345,7 @@ class _AddCamMainState extends State<AddCamMain> {
'Platzung': TextEditingController(text: selectedPlatzung),
'KTage1': kTage1C,
'KTage2': kTage2C,
'Standort': altStOrtC,
};
for (var entry in fields.entries) {
@@ -388,42 +364,8 @@ class _AddCamMainState extends State<AddCamMain> {
// 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<String, dynamic> 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<String, dynamic> templates = getPlace();
if (widget.isTemplate) {
await placeDB.updateTemplate(templates);
@@ -436,42 +378,8 @@ class _AddCamMainState extends State<AddCamMain> {
// * also creates a json string to send it to the server later
void saveData() async {
var placeDB = DBHelper();
Map<String, dynamic> 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<String, dynamic> place = getPlace();
await placeDB.addPlace(place);
}
@@ -490,32 +398,19 @@ class _AddCamMainState extends State<AddCamMain> {
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<AddCamMain> {
});
},
),
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<AddCamMain> {
});
},
),
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<AddCamMain> {
},
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<AddCamMain> {
),
],
)),
// 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<AddCamMain> {
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<AddCamMain> {
});
} else {
String emptyField = validateData();
// ! always fileed out
empty = false;
if (empty == true) {
showTemplateDialog(emptyField);
();