sitzung luc
This commit is contained in:
13
Todo.txt
13
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:
|
||||
|
||||
@@ -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,15 +398,70 @@ class _AddCamMainState extends State<AddCamMain> {
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: AltStOrt(altStOrtC: altStOrtC),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 1,
|
||||
),
|
||||
STTyp(
|
||||
initialSTTyp: selectedSTTyp,
|
||||
onSTTypChanged: (sttyp) {
|
||||
setState(() {
|
||||
selectedSTTyp = sttyp;
|
||||
});
|
||||
},
|
||||
),
|
||||
const SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: Row(
|
||||
children: [
|
||||
Text(AppLocalizations.of(context)!.status),
|
||||
const Text(
|
||||
'*',
|
||||
style: TextStyle(color: Colors.red),
|
||||
),
|
||||
],
|
||||
)),
|
||||
Status(
|
||||
initialStatus: selectedStatus,
|
||||
onStatusChanged: (status) {
|
||||
setState(() {
|
||||
selectedStatus = status;
|
||||
});
|
||||
},
|
||||
),
|
||||
Betreuung(betreuungC: betreuungC),
|
||||
const SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
CamId(id: id),
|
||||
Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: FFTyp(ffTypC: ffTypC),
|
||||
),
|
||||
Rudel(rudelC: rudelC),
|
||||
const SizedBox(
|
||||
height: 15,
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: Row(
|
||||
children: [
|
||||
Text(AppLocalizations.of(context)!.zeiteinstellung),
|
||||
const Text(
|
||||
'*',
|
||||
style: TextStyle(color: Colors.red),
|
||||
)
|
||||
],
|
||||
)),
|
||||
MEZ(
|
||||
initialMEZ: selectedMEZ,
|
||||
onMEZChanged: (mez) {
|
||||
setState(() {
|
||||
selectedMEZ = mez;
|
||||
});
|
||||
},
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: Row(
|
||||
@@ -517,157 +480,20 @@ class _AddCamMainState extends State<AddCamMain> {
|
||||
const SizedBox(
|
||||
height: 15,
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: Row(
|
||||
children: [
|
||||
Text(AppLocalizations.of(context)!.status),
|
||||
const Text(
|
||||
'*',
|
||||
style: TextStyle(color: Colors.red),
|
||||
),
|
||||
],
|
||||
)),
|
||||
Status(
|
||||
initialStatus: selectedStatus,
|
||||
onStatusChanged: (status) {
|
||||
setState(() {
|
||||
selectedStatus = status;
|
||||
});
|
||||
},
|
||||
),
|
||||
const SizedBox(
|
||||
height: 15,
|
||||
),
|
||||
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;
|
||||
});
|
||||
},
|
||||
),
|
||||
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,
|
||||
height: 5,
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: Row(
|
||||
children: [
|
||||
Text(AppLocalizations.of(context)!.ktage1),
|
||||
const Text(
|
||||
'*',
|
||||
style: TextStyle(color: Colors.red),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
KTage1(kTage1C: kTage1C),
|
||||
Rudel(rudelC: rudelC),
|
||||
const SizedBox(
|
||||
height: 20,
|
||||
height: 15,
|
||||
),
|
||||
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(
|
||||
children: [
|
||||
Text(AppLocalizations.of(context)!.zeiteinstellung),
|
||||
const Text(
|
||||
'*',
|
||||
style: TextStyle(color: Colors.red),
|
||||
)
|
||||
],
|
||||
)),
|
||||
MEZ(
|
||||
initialMEZ: selectedMEZ,
|
||||
onMEZChanged: (mez) {
|
||||
setState(() {
|
||||
selectedMEZ = mez;
|
||||
});
|
||||
},
|
||||
),
|
||||
KontSum(kontSumC: kontSumC),
|
||||
],
|
||||
)),
|
||||
// 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: NameVorname(nameVornameC: nameVornameC)),
|
||||
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: 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);
|
||||
();
|
||||
|
||||
@@ -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<Datum> {
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
Column(children: [
|
||||
Text(
|
||||
'${datum?.day}. ${datum?.month}. ${datum?.year}',
|
||||
),
|
||||
//const SizedBox(
|
||||
// height: 2,
|
||||
//),
|
||||
ElevatedButton(
|
||||
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}',
|
||||
),
|
||||
]),
|
||||
],
|
||||
);
|
||||
@@ -383,20 +387,20 @@ class _DatumState extends State<Datum> {
|
||||
}
|
||||
}
|
||||
|
||||
// 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<NameVorname> createState() => _NameVornameState();
|
||||
State<Addresse1> createState() => _Addresse1State();
|
||||
}
|
||||
|
||||
class _NameVornameState extends State<NameVorname> {
|
||||
class _Addresse1State extends State<Addresse1> {
|
||||
String? selectedRudel;
|
||||
late Future<List<Map<String, dynamic>>> NameVorname;
|
||||
late Future<List<Map<String, dynamic>>> Addresse1;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -404,15 +408,15 @@ class _NameVornameState extends State<NameVorname> {
|
||||
|
||||
_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<NameVorname> {
|
||||
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<NameVorname> {
|
||||
child: Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: FutureBuilder<List<Map<String, dynamic>>>(
|
||||
future: NameVorname,
|
||||
future: Addresse1,
|
||||
builder: (BuildContext context,
|
||||
AsyncSnapshot<List<Map<String, dynamic>>> snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return DropdownButton<String>(
|
||||
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<NameVorname> {
|
||||
);
|
||||
}
|
||||
|
||||
// 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<PLZOrt> createState() => _PLZOrtState();
|
||||
State<Addresse2> createState() => _Addresse2State();
|
||||
}
|
||||
|
||||
class _PLZOrtState extends State<PLZOrt> {
|
||||
class _Addresse2State extends State<Addresse2> {
|
||||
String? selectedRudel;
|
||||
late Future<List<Map<String, dynamic>>> PLZOrt;
|
||||
late Future<List<Map<String, dynamic>>> Addresse2;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
PLZOrt = DBHelper().getPlace();
|
||||
Addresse2 = DBHelper().getPlace();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -515,10 +519,10 @@ class _PLZOrtState extends State<PLZOrt> {
|
||||
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<PLZOrt> {
|
||||
child: Align(
|
||||
alignment: Alignment.bottomLeft,
|
||||
child: FutureBuilder<List<Map<String, dynamic>>>(
|
||||
future: PLZOrt,
|
||||
future: Addresse2,
|
||||
builder: (BuildContext context,
|
||||
AsyncSnapshot<List<Map<String, dynamic>>> snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return DropdownButton<String>(
|
||||
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<PLZOrt> {
|
||||
);
|
||||
}
|
||||
|
||||
// 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<EmailTel> createState() => _EmailTelState();
|
||||
State<Addresse3> createState() => _Addresse3State();
|
||||
}
|
||||
|
||||
class _EmailTelState extends State<EmailTel> {
|
||||
class _Addresse3State extends State<Addresse3> {
|
||||
String? selectedRudel;
|
||||
late Future<List<Map<String, dynamic>>> EmailTel;
|
||||
late Future<List<Map<String, dynamic>>> Addresse3;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
EmailTel = DBHelper().getPlace();
|
||||
Addresse3 = DBHelper().getPlace();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -593,28 +597,28 @@ class _EmailTelState extends State<EmailTel> {
|
||||
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<List<Map<String, dynamic>>>(
|
||||
future: EmailTel,
|
||||
future: Addresse3,
|
||||
builder: (BuildContext context,
|
||||
AsyncSnapshot<List<Map<String, dynamic>>> snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return DropdownButton<String>(
|
||||
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<BLand> {
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
_loadPref();
|
||||
if (widget.bLandC.text == "") _loadPref();
|
||||
|
||||
BLand = DBHelper().getPlace();
|
||||
}
|
||||
@@ -949,7 +953,8 @@ class _OrtInfoState extends State<OrtInfo> {
|
||||
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<Status> createState() => _StatusState();
|
||||
@@ -1043,7 +1048,7 @@ class _StatusState extends State<Status> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.inaktiv),
|
||||
leading: Radio<String>(
|
||||
value: 'inaktiv',
|
||||
value: 'anaktiv',
|
||||
groupValue: _selectedStatus,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1240,7 +1245,7 @@ class _PlatzungState extends State<Platzung> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.kirrung),
|
||||
leading: Radio<String>(
|
||||
value: 'kirrung',
|
||||
value: 'Kirrung',
|
||||
groupValue: _selectedPlatzung,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1254,7 +1259,7 @@ class _PlatzungState extends State<Platzung> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.wasserstelle),
|
||||
leading: Radio<String>(
|
||||
value: 'wasserstelle',
|
||||
value: 'Wasserstelle',
|
||||
groupValue: _selectedPlatzung,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1268,7 +1273,7 @@ class _PlatzungState extends State<Platzung> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.wald),
|
||||
leading: Radio<String>(
|
||||
value: 'wald',
|
||||
value: 'Wald',
|
||||
groupValue: _selectedPlatzung,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1282,7 +1287,7 @@ class _PlatzungState extends State<Platzung> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.wildwechsel),
|
||||
leading: Radio<String>(
|
||||
value: 'wildwechsel',
|
||||
value: 'Wildwechsel',
|
||||
groupValue: _selectedPlatzung,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1296,7 +1301,7 @@ class _PlatzungState extends State<Platzung> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.wegstrasse),
|
||||
leading: Radio<String>(
|
||||
value: 'weg/straße',
|
||||
value: 'Weg/Straße',
|
||||
groupValue: _selectedPlatzung,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1310,7 +1315,7 @@ class _PlatzungState extends State<Platzung> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.hofgarten),
|
||||
leading: Radio<String>(
|
||||
value: 'hof/garten',
|
||||
value: 'Hof/Garten',
|
||||
groupValue: _selectedPlatzung,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1324,7 +1329,7 @@ class _PlatzungState extends State<Platzung> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.wiesefeld),
|
||||
leading: Radio<String>(
|
||||
value: 'wiese/feld/offenfläche',
|
||||
value: 'Wiese/Feld/Offenfläche',
|
||||
groupValue: _selectedPlatzung,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1371,7 +1376,7 @@ class _FotoFilmState extends State<FotoFilm> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.foto),
|
||||
leading: Radio<String>(
|
||||
value: 'foto',
|
||||
value: 'Foto',
|
||||
groupValue: _selectedFotoFilm,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1385,7 +1390,7 @@ class _FotoFilmState extends State<FotoFilm> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.film),
|
||||
leading: Radio<String>(
|
||||
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<MEZ> createState() => _MEZState();
|
||||
@@ -1429,7 +1435,7 @@ class _MEZState extends State<MEZ> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.sommerzeit),
|
||||
leading: Radio<String>(
|
||||
value: 'sommerzeit',
|
||||
value: 'Sommerzeit',
|
||||
groupValue: _selectedMEZ,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1443,7 +1449,7 @@ class _MEZState extends State<MEZ> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.winterzeit),
|
||||
leading: Radio<String>(
|
||||
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<Bearsafe> createState() => _BearsafeState();
|
||||
@@ -1566,7 +1572,7 @@ class _BearsafeState extends State<Bearsafe> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.nein),
|
||||
leading: Radio<String>(
|
||||
value: 'nein',
|
||||
value: 'Nein',
|
||||
groupValue: _selectedBearsafe,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1580,7 +1586,7 @@ class _BearsafeState extends State<Bearsafe> {
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(AppLocalizations.of(context)!.ja),
|
||||
leading: Radio<String>(
|
||||
value: 'ja',
|
||||
value: 'Ja',
|
||||
groupValue: _selectedBearsafe,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
@@ -1613,20 +1619,23 @@ class _KontDatState extends State<KontDat> {
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
Column(children: [
|
||||
Text(
|
||||
'${kontDat?.day}. ${kontDat?.month}. ${kontDat?.year}',
|
||||
),
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
ElevatedButton(
|
||||
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}',
|
||||
),
|
||||
]),
|
||||
],
|
||||
);
|
||||
@@ -1667,20 +1676,23 @@ class _AbbauDatState extends State<AbbauDat> {
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
Column(children: [
|
||||
Text(
|
||||
'${abbauDat?.day}. ${abbauDat?.month}. ${abbauDat?.year}',
|
||||
),
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
ElevatedButton(
|
||||
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}',
|
||||
),
|
||||
]),
|
||||
],
|
||||
);
|
||||
@@ -2188,7 +2200,18 @@ class _AltStOrtState extends State<AltStOrt> {
|
||||
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<AusVon> {
|
||||
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<AusVon> {
|
||||
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<AusBis> {
|
||||
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<AusBis> {
|
||||
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<IntKomm> {
|
||||
|
||||
// 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<KontSum> createState() => _KontSumState();
|
||||
State<Betreuung> createState() => _BetreuungState();
|
||||
}
|
||||
|
||||
class _KontSumState extends State<KontSum> {
|
||||
class _BetreuungState extends State<Betreuung> {
|
||||
String? selectedRudel;
|
||||
late Future<List<Map<String, dynamic>>> KontSum;
|
||||
|
||||
@@ -2542,8 +2571,8 @@ class _KontSumState extends State<KontSum> {
|
||||
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<KontSum> {
|
||||
setState(
|
||||
() {
|
||||
selectedRudel = value;
|
||||
widget.kontSumC.text = value ?? '';
|
||||
widget.betreuungC.text = value ?? '';
|
||||
},
|
||||
);
|
||||
},
|
||||
|
||||
@@ -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))');
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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<IntroScreen> {
|
||||
TextEditingController nameVornameC = TextEditingController();
|
||||
TextEditingController addresse1C = TextEditingController();
|
||||
TextEditingController bLandC = TextEditingController();
|
||||
TextEditingController apiAddress = TextEditingController();
|
||||
|
||||
Future<void> _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<IntroScreen> {
|
||||
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(
|
||||
@@ -122,6 +140,14 @@ class _IntroScreenState extends State<IntroScreen> {
|
||||
TextField(
|
||||
controller: bLandC,
|
||||
),
|
||||
const SizedBox(
|
||||
height: 15,
|
||||
),
|
||||
TextField(
|
||||
decoration: InputDecoration(
|
||||
hintText: AppLocalizations.of(context)!.apiaddress),
|
||||
controller: apiAddress,
|
||||
)
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<Settings> {
|
||||
late Future<String> initName;
|
||||
late Future<String> initBLand;
|
||||
TextEditingController nameVornameC = TextEditingController();
|
||||
TextEditingController bLandC = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
initName = _loadName();
|
||||
initBLand = _loadBLand();
|
||||
}
|
||||
|
||||
Future<String> _loadName() {
|
||||
Future<String> 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<String> _loadBLand() {
|
||||
Future<String> 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<String>(
|
||||
future: initName, // your Future<String>
|
||||
builder:
|
||||
(BuildContext context, AsyncSnapshot<String> 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<String>(
|
||||
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();
|
||||
}
|
||||
}
|
||||
@@ -201,11 +201,11 @@ class _ViewCamsState extends State<ViewCams> {
|
||||
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<ViewCams> {
|
||||
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(
|
||||
|
||||
@@ -1 +1,5 @@
|
||||
{}
|
||||
{
|
||||
"de": [
|
||||
"firstStep"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user