From 3be74688fd972bc0bc8028ba629436aab304baf3 Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 24 Apr 2024 21:45:13 +0200 Subject: [PATCH] luc sitzung --- Todo.txt | 12 ++- assets/images/reconix_small.png | Bin 0 -> 39984 bytes lib/addCam/add_cam_main.dart | 133 ++++++++++++++------------------ lib/addCam/cam_widgets.dart | 86 ++++++++++++++------- lib/home.dart | 2 +- lib/main.dart | 4 + lib/other/db_helper.dart | 35 +++++++-- lib/other/settings.dart | 1 - lib/viewCam/view_cams.dart | 15 ++-- pubspec.lock | 32 ++++++++ pubspec.yaml | 1 + time.txt | 4 - 12 files changed, 195 insertions(+), 130 deletions(-) create mode 100644 assets/images/reconix_small.png diff --git a/Todo.txt b/Todo.txt index 740e998..bcfcf53 100644 --- a/Todo.txt +++ b/Todo.txt @@ -1,33 +1,31 @@ todo: -<<<<<<< HEAD -TEST SEND FILE TO SERVER FUNCTION maybe auch vorschläge aus templates in dropdown menüs anzeigen im englischen abändern zurückfeld in datenansicht überschriften für view cams dropdown menü fixen (ai fragen) -======= ->>>>>>> d6ae86598dd9d031af9fe29680dc050c5bb2946f fehler beim speichern anzeigen nach koordinaten lkr auswählen (esri-leaflet-geocoder) fix ktage und nebeneinander positioniere textdateien auch an server senden -<<<<<<< HEAD error check wenn dateiauswahl abgebrochen wurde einfügen save option einfügen nur zum speichern -======= ausvon und ausbis fixen (falsches datum übergeben (20000-01-01)) zurückfeld in datenansicht maybe auch vorschläge aus templates in dropdown menüs anzeigen im englischen abändern ->>>>>>> d6ae86598dd9d031af9fe29680dc050c5bb2946f +einzelnen eintrag löschen +alle datumsfelder in 1 klasse und überarbeiten dass entfernen funktioniert und knöpfe bissl breiter + keine ahnung obs funktioniert: dropdown menü fixen (ai fragen) +TEST SEND FILE TO SERVER FUNCTION eintrg in db wenn http response (in sent column) not to do: +standartwert in textfeld überschriften für view cams schritte latlang umbenennen gespeicherten ordner anzeigen diff --git a/assets/images/reconix_small.png b/assets/images/reconix_small.png new file mode 100644 index 0000000000000000000000000000000000000000..917e659dac0a6f7798a43259bdce02313089fa06 GIT binary patch literal 39984 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 xp1rKL?NmlucAZ%U;{Bj&& z&ndPFRN?mmuj@u)Od^A)-CkB_b+{SF8OQraT&UwfHHr4A>)uQJ{rC)(hC=gV!@MS| zPSpT$U~78TBy4*MH}Q!5F5a`Lu3Nja2DzgDxwyFSyAyBR`45x(u<$?T=jSg#&v9mY z#@)Jo(_O!DlOYM8-I`0*7Pp~fRn}kQrl3l)AR)%rcia71Zdc>FgcF?)k&dhgJrJoB zdU|67Rw;s>t)TWHv^ynp-QhgUkIQU0&ctvz=9Bq_KyH+rmcpsCc~-3t@ps*)x3IBmk}>9_>% z?g5KdMX?+D4k)?fBo$?BKH3}GNlBF4NA4YP#&|C_(Y68UL3-BlfUeU2lg$CwVAe7; zV6CrYv}vs%{(irOv=~w6#tbNY2HjeWAtd9|XXz~oDN}%%Bto}_zxOtKTur`vZ~Y}7 z!v8L|tMYv0CT=k1)?2OYU*EiW6PN5?W=ekwtpOm<0QzPx#alf3BSL&wvlU2^n%6zf z$~92^b|WnL9Fo2@2`81`o0rWa9B-tDVQC`T2U)9;;3gW%4)g>E{kclqef);z7-@8K zf5y&L#KKTTn|#ebRgLepu|eazD#v-Aq3k&oA&gVCO^UBp5n?m>;?<)&c7?H3M@lEQ|M!XMdW$`LR<+%GZrQEw_ z6YwzL;7zp?%Y@oV9LMV_%%JPN+s4I<7yr38I?!Ns-CvSNx7(RLdGf?%pBlUz>% literal 0 HcmV?d00001 diff --git a/lib/addCam/add_cam_main.dart b/lib/addCam/add_cam_main.dart index f3b72ac..4220a95 100644 --- a/lib/addCam/add_cam_main.dart +++ b/lib/addCam/add_cam_main.dart @@ -302,20 +302,24 @@ class _AddCamMainState extends State { try { response = await dio.post(prefs.getString('apiAddress') ?? "", data: jsonEncode(place)); + print(jsonEncode(place)); } on DioException catch (e) { if (e.response?.statusCode == 500) { -/* print('-------------------------'); - print('code 500'); */ + print('-------------------------'); + print('code 500'); return; } } if (response.statusCode == 201) { - // print(response.statusCode); + print("------------------"); + print(response.statusCode); var placeDB = DBHelper(); await placeDB.updateSent(); } else { - //print(response.statusCode); + print("----------------"); + print("Anderer code"); + print(response.statusCode); } } @@ -397,6 +401,10 @@ class _AddCamMainState extends State { Map place = getPlace(); await placeDB.addPlace(place); + + if (widget.isTemplate) { + await placeDB.deleteTemplate(id.text); + } } // The widget tree which gets the shown widget from the ./cam_widgets.dart file @@ -412,7 +420,7 @@ class _AddCamMainState extends State { children: [ Align( alignment: Alignment.bottomLeft, - child: RequiredVarTextField( + child: VarTextField( required: true, dbName: "Standort", textController: standortC, @@ -452,16 +460,24 @@ class _AddCamMainState extends State { }); }, ), - RequiredVarTextField(textController: betreuungC, localization: AppLocalizations.of(context)!.betreuung, dbName: "KontSum", required: false), - Betreuung(betreuungC: betreuungC), + VarTextField( + textController: betreuungC, + localization: AppLocalizations.of(context)!.betreuung, + dbName: "KontSum", + required: false), const SizedBox( height: 20, ), - CamId(id: id), - Align( - alignment: Alignment.bottomLeft, - child: FFTyp(ffTypC: ffTypC), - ), + VarTextField( + textController: id, + localization: AppLocalizations.of(context)!.camLink, + dbName: "CID", + required: true), + VarTextField( + textController: ffTypC, + localization: AppLocalizations.of(context)!.fftyp, + dbName: "FFTyp", + required: true), const SizedBox( height: 15, ), @@ -502,14 +518,11 @@ class _AddCamMainState extends State { const SizedBox( height: 15, ), - Align( - alignment: Alignment.bottomLeft, - child: KSchloNr(kSchloNrC: kSchloNrC), - ), + VarTextField(textController: kSchloNrC, localization: AppLocalizations.of(context)!.kschlonr, dbName: "KSchloNr", required: false), const SizedBox( height: 5, ), - Rudel(rudelC: rudelC), + VarTextField(textController: rudelC, localization: AppLocalizations.of(context)!.rudel, dbName: "Rudel", required: true), const SizedBox( height: 15, ), @@ -562,22 +575,10 @@ class _AddCamMainState extends State { }, child: Text(AppLocalizations.of(context)!.openMap)), ), - Align( - alignment: Alignment.bottomLeft, - child: BLand(bLandC: bLandC), - ), - Align( - alignment: Alignment.bottomLeft, - child: Lkr(lkrC: lkrC), - ), - Align( - alignment: Alignment.bottomLeft, - child: BeiOrt(beiOrtC: beiOrtC), - ), - Align( - alignment: Alignment.bottomLeft, - child: OrtInfo(ortInfoC: ortInfoC), - ), + VarTextField(textController: bLandC, localization: AppLocalizations.of(context)!.bland, dbName: "BLand", required: true, default_value: "bLand",), + VarTextField(textController: lkrC, localization: AppLocalizations.of(context)!.lkr, dbName: "Lkr", required: true), + VarTextField(textController: beiOrtC, localization: AppLocalizations.of(context)!.beiort, dbName: "BeiOrt", required: true), + VarTextField(textController: ortInfoC, localization: AppLocalizations.of(context)!.ortinfo, dbName: "OrtInfo", required: false), const SizedBox( height: 15, ), @@ -626,7 +627,7 @@ class _AddCamMainState extends State { ], ), ), - KTage1(kTage1C: kTage1C), + VarTextField(textController: kTage1C, localization: AppLocalizations.of(context)!.ktage1, dbName: "KTage1", required: true, default_value: "kTage1",), const SizedBox( height: 20, ), @@ -641,26 +642,28 @@ class _AddCamMainState extends State { ) ], )), - KTage2(kTage2C: kTage2C), + VarTextField(textController: kTage2C, localization: AppLocalizations.of(context)!.ktage2, dbName: "KTage1", required: true, default_value: "kTage2",), const SizedBox( height: 20, ), - AbbauDat(abbauDat: abbauDat), + Row( + children: [ + AbbauDat(abbauDat: abbauDat), + ElevatedButton( + onPressed: () { + setState(() { + abbauDat = null; + }); + }, + child: const Text("X")) + ], + ), const SizedBox( height: 20, ), - Align( - alignment: Alignment.bottomLeft, - child: Auftrag(auftragC: auftragC), - ), - Align( - alignment: Alignment.bottomLeft, - child: KontAbsp(kontAbspC: kontAbspC), - ), - Align( - alignment: Alignment.bottomLeft, - child: SonstBem(sonstBemC: sonstBemC), - ), + VarTextField(textController: auftragC, localization: AppLocalizations.of(context)!.auftrag, dbName: "Auftrag", required: false), + VarTextField(textController: kontAbspC, localization: AppLocalizations.of(context)!.kontabsp, dbName: "KontAbsp", required: false), + VarTextField(textController: sonstBemC, localization: AppLocalizations.of(context)!.sonstbemerkungen, dbName: "SonstBem", required: false), ], )), // Fourth step @@ -671,36 +674,16 @@ class _AddCamMainState extends State { const SizedBox( height: 15, ), - Align( - alignment: Alignment.bottomLeft, - child: Adresse1(adresse1C: adresse1C)), - Align( - alignment: Alignment.bottomLeft, - child: Adresse2(adresse2C: adresse2C), - ), - Align( - alignment: Alignment.bottomLeft, - child: Adresse3(adresse3C: adresse3C), - ), + VarTextField(textController: adresse1C, localization: AppLocalizations.of(context)!.adresse1, dbName: "Adresse1", required: true), + VarTextField(textController: adresse2C, localization: AppLocalizations.of(context)!.adresse2, dbName: "Adresse2", required: false), + VarTextField(textController: adresse3C, localization: AppLocalizations.of(context)!.adresse3, dbName: "Adresse2", required: false), const SizedBox( height: 15, ), - Align( - alignment: Alignment.bottomLeft, - child: FKontakt1(fKontakt1C: fKontakt1C), - ), - Align( - alignment: Alignment.bottomLeft, - child: FKontakt2(fKontakt2C: fKontakt2C), - ), - Align( - alignment: Alignment.bottomLeft, - child: FKontakt3(fKontakt3C: fKontakt3C), - ), - Align( - alignment: Alignment.bottomLeft, - child: IntKomm(intKommC: intKommC), - ), + VarTextField(textController: fKontakt1C, localization: AppLocalizations.of(context)!.fkontakt1, dbName: "FKontakt1", required: false), + VarTextField(textController: fKontakt2C, localization: AppLocalizations.of(context)!.fkontakt2, dbName: "FKontakt2", required: false), + VarTextField(textController: fKontakt3C, localization: AppLocalizations.of(context)!.fkontakt3, dbName: "FKontakt3", required: false), + VarTextField(textController: intKommC, localization: AppLocalizations.of(context)!.intkomm, dbName: "IntKomm", required: false), ], )) ]; diff --git a/lib/addCam/cam_widgets.dart b/lib/addCam/cam_widgets.dart index 3a37bad..f3d0cbc 100644 --- a/lib/addCam/cam_widgets.dart +++ b/lib/addCam/cam_widgets.dart @@ -7,6 +7,7 @@ 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'; // * Collection of All widgets displayed in the add_cam section @@ -16,31 +17,48 @@ import 'package:shared_preferences/shared_preferences.dart'; // * Step 1 place, camera, terretory // -class RequiredVarTextField extends StatefulWidget { +class VarTextField extends StatefulWidget { final TextEditingController textController; final String localization; final String dbName; + final String? default_value; final bool required; - const RequiredVarTextField( + const VarTextField( {super.key, required this.textController, required this.localization, - required this.dbName, required this.required}); + required this.dbName, + required this.required, + this.default_value}); @override - State createState() => _RequiredVarTextFieldState(); + State createState() => _VarTextFieldState(); } -class _RequiredVarTextFieldState extends State { +class _VarTextFieldState extends State { late Future>> dbVar; @override void initState() { super.initState(); + + if (widget.textController.text == "" && widget.default_value != null) + _loadPref(); + dbVar = DBHelper().getPlace(); } + void _loadPref() { + Future.delayed(Duration.zero, () async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + String bLand = prefs.getString(widget.default_value!) ?? ""; + setState(() { + widget.textController.text = bLand; + }); + }); + } + @override Widget build(BuildContext context) { return Row( @@ -51,23 +69,29 @@ class _RequiredVarTextFieldState extends State { controller: widget.textController, keyboardType: TextInputType.multiline, maxLines: null, + onChanged: (value) { + setState(() { + widget.textController.text = value; + }); + }, decoration: InputDecoration( - hintText: widget.localization, - enabledBorder: widget.required - ? (widget.textController.text.isEmpty - ? const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.red)) - : const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.green))) - : const UnderlineInputBorder(borderSide: BorderSide(color: Colors.grey)), - focusedBorder: widget.required - ? (widget.textController.text.isEmpty - ? const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.red)) - : const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.green))) - : const UnderlineInputBorder(borderSide: BorderSide(color: Colors.grey)) - ), + hintText: widget.localization, + enabledBorder: widget.required + ? (widget.textController.text.isEmpty + ? const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.red)) + : const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.green))) + : const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.grey)), + focusedBorder: widget.required + ? (widget.textController.text.isEmpty + ? const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.red)) + : const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.green))) + : const UnderlineInputBorder( + borderSide: BorderSide(color: Colors.grey))), )), Expanded( flex: 1, @@ -123,10 +147,10 @@ class Standort extends StatefulWidget { {super.key, required this.standortC, required this.localization}); @override - State createState() => _RequiredVarTextFieldState(); + State createState() => _StandortState(); } -class _StandortState extends State { +class _StandortState extends State { late Future>> Standort; @override @@ -426,6 +450,9 @@ class KarteState extends State { Position? updatedPosition; bool saveVisible = false; + + + @override void initState() { super.initState(); @@ -452,8 +479,13 @@ class KarteState extends State { children: [ Text(AppLocalizations.of(context)!.saveMap), TextButton( - onPressed: () { + onPressed: () async { + + List placemarks = await placemarkFromCoordinates(selectedPosition!.latitude, selectedPosition!.longitude); + print(placemarks); + if (selectedPosition != null) { + setState(() { updatedPosition = Position( longitude: selectedPosition!.longitude, @@ -1935,16 +1967,12 @@ class _AbbauDatState extends State { Future pickDate() async { final date = await showDatePicker( context: context, - initialDate: abbauDat!, + initialDate: DateTime.now(), firstDate: DateTime(2000), lastDate: DateTime(5000)); if (date == null) return null; setState(() => abbauDat = date); - var place = {'AbbauDat': DateFormat('yyyy-MM-dd').format(abbauDat!)}; - - await DBHelper().addPlace(place); - return abbauDat; } } diff --git a/lib/home.dart b/lib/home.dart index 446d9ad..b93db7c 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -32,7 +32,7 @@ class HomePage extends StatelessWidget { ), body: Column( children: [ - Image.asset('assets/images/reconix.png'), + Image.asset('assets/images/reconix_small.png'), Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/main.dart b/lib/main.dart index 74436fa..3bd2269 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,6 +19,8 @@ void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); bool isFirstLaunch = prefs.getBool('isFirstLaunch') ?? true; + await prefs.setString('kTage1', "28"); + await prefs.setString('kTage2', "48"); runApp(MyApp(isFirstLaunch: isFirstLaunch)); } @@ -26,6 +28,8 @@ class MyApp extends StatelessWidget { final bool isFirstLaunch; const MyApp({super.key, required this.isFirstLaunch}); + + @override Widget build(BuildContext context) { return MaterialApp( diff --git a/lib/other/db_helper.dart b/lib/other/db_helper.dart index 0c0d43b..98e8d69 100644 --- a/lib/other/db_helper.dart +++ b/lib/other/db_helper.dart @@ -9,13 +9,12 @@ import 'package:path/path.dart'; class DBHelper { static Database? _placeDB; - // checks if the databses are existing and creates them with the initPlaceDatabase function if not Future get placeDB async { if (_placeDB != null) { return _placeDB!; } - _placeDB = await initPlaceDatabase(); + _placeDB = await initPlaceDatabase(); return _placeDB!; } @@ -31,12 +30,11 @@ class DBHelper { // The function that helps _onCreatePlace(Database placeDB, int version) async { await placeDB.execute( - 'CREATE TABLE place (CID TEXT PRIMARY KEY UNIQUE NOT NULL, 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, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8), Sent INTEGER DEFAULT 0)'); + 'CREATE TABLE place (CID TEXT PRIMARY KEY UNIQUE NOT NULL, 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, 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 (CID TEXT PRIMARY KEY UNIQUE NOT NULL, 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, KTage1 INTEGER, KTage2 INTEGER, ProtoAm DATE, IntKomm TEXT, DECLNG DECIMALS(4,8), DECLAT DECIMALS(4,8))'); } - // Function to add a finished entrie Future addPlace(Map place) async { var placeDBClient = await placeDB; @@ -50,6 +48,7 @@ class DBHelper { // checks if the camid var from before is empty to avoid double entries if (existingCID.isNotEmpty) { + //throw Exception("Eintrag existiert schon"); return; } @@ -59,7 +58,7 @@ class DBHelper { place, // replaces the entrie with the new onw if a unique value exists and conflicts - conflictAlgorithm: ConflictAlgorithm.replace, + // conflictAlgorithm: ConflictAlgorithm.replace, ); } @@ -67,7 +66,8 @@ class DBHelper { Future updateSent() async { var placeDBClient = await placeDB; - placeDBClient.update('place', true as Map, where: 'CID = ?', whereArgs: ['CID']); + placeDBClient.update('place', true as Map, + where: 'CID = ?', whereArgs: ['CID']); } // same thing as before but with templatews @@ -86,7 +86,7 @@ class DBHelper { await placeDBClient.insert( 'templates', templates, - conflictAlgorithm: ConflictAlgorithm.replace, + // conflictAlgorithm: ConflictAlgorithm.replace, ); } @@ -102,7 +102,6 @@ class DBHelper { ); } - // get the finished entries from db Future>> getPlace() async { var placeDBClient = await placeDB; @@ -126,4 +125,24 @@ class DBHelper { var placeDBClient = await placeDB; await placeDBClient.delete('templates'); } + + // delete specific template + Future deleteTemplate(String cid) async { + var placeDBClient = await placeDB; + await placeDBClient.delete( + 'templates', + where: 'CID = ?', + whereArgs: [cid], + ); + } + +// delete specific place + Future deletePlace(String cid) async { + var placeDBClient = await placeDB; + await placeDBClient.delete( + 'place', + where: 'CID = ?', + whereArgs: [cid], + ); + } } diff --git a/lib/other/settings.dart b/lib/other/settings.dart index a2f1796..8b0d9f6 100644 --- a/lib/other/settings.dart +++ b/lib/other/settings.dart @@ -22,7 +22,6 @@ class _SettingsState extends State { - @override Widget build(BuildContext context) { return Scaffold( diff --git a/lib/viewCam/view_cams.dart b/lib/viewCam/view_cams.dart index f7c5402..31c2d37 100644 --- a/lib/viewCam/view_cams.dart +++ b/lib/viewCam/view_cams.dart @@ -1,6 +1,8 @@ import 'package:fforte/addCam/add_cam_main.dart'; import 'package:fforte/other/db_helper.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_popup_card/flutter_popup_card.dart'; // * Site that shows all entries in the databases @@ -132,11 +134,14 @@ class _ViewCamsState extends State { Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text(AppLocalizations.of(context)!.placedata), - const SizedBox( - width: 250, - ), - Text(AppLocalizations.of(context)!.sent), + Expanded( + flex: 2, + child: Text( + AppLocalizations.of(context)!.placedata)), + Expanded( + flex: 2, + child: + Text(AppLocalizations.of(context)!.sent)), ], ), const SizedBox( diff --git a/pubspec.lock b/pubspec.lock index cd152bb..7a9185f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -197,6 +197,38 @@ packages: description: flutter source: sdk version: "0.0.0" + geocoding: + dependency: "direct main" + description: + name: geocoding + sha256: d580c801cba9386b4fac5047c4c785a4e19554f46be42f4f5e5b7deacd088a66 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + geocoding_android: + dependency: transitive + description: + name: geocoding_android + sha256: "4e1539a136c6ab4c44963cfc631970ee499f706a03654fc1d446b2100caf7221" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + geocoding_ios: + dependency: transitive + description: + name: geocoding_ios + sha256: "94ddba60387501bd1c11e18dca7c5a9e8c645d6e3da9c38b9762434941870c24" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + geocoding_platform_interface: + dependency: transitive + description: + name: geocoding_platform_interface + sha256: "8c2c8226e5c276594c2e18bfe88b19110ed770aeb7c1ab50ede570be8b92229b" + url: "https://pub.dev" + source: hosted + version: "3.2.0" geolocator: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 21661c5..4c4f50f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,7 @@ dependencies: file_picker: ^6.2.0 http: ^1.2.1 dio: ^5.4.1 + geocoding: ^3.0.0 dev_dependencies: flutter_lints: ^3.0.1 diff --git a/time.txt b/time.txt index 97299a8..f5ce9e1 100644 --- a/time.txt +++ b/time.txt @@ -46,9 +46,5 @@ 21 mär 4h 15 min 23 mär 2h 15 min 24 mär 1h -<<<<<<< HEAD 26 mär 45 min 20 mär 1h 30 min -======= -17 apr 45 min ->>>>>>> d6ae86598dd9d031af9fe29680dc050c5bb2946f