diff --git a/README.md b/README.md index fec890dc340bf97e8558a7701c86aba53856df75..542902423d54825129e77e904fc9d7ae9b66d7f0 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ A cross plattform project for android and ios to log events offline everywhere a - How to store not uploaded events locally? Dumping jsons to a file?, ObjectBox, SharedPreferences, - ## Local Base Data Concept - The configuration.dart age widget is used to get the online available information for available devices and event creation. @@ -22,37 +21,40 @@ A cross plattform project for android and ios to log events offline everywhere a - This "base data" is required to provide the dropdown menu options on the addevent.dart page. - This "base data" needs to be stored persistently, so that it is available also offline! -## Add Event Widget +## Add Event Page - Usw Switch for automatic GNSS and Time update. - Show "now" time button only if GNSS is disabled. This button shall fill the timestamp with the current utc time. -## View Events Widget +## View & Sync Page - Events added on the addevent.dart page have to be stored locally persistently. They can be displayed in the view events widget. Each event has a flag which shows if the event is already exported to sensor. Shall exported events be displayed here? Slide switch to also show exported events? - Functionality to export events locally for backup in the field! - + ## Configuration Page -- Dropdown "Collection" to select a collection -- Textfield to show current locally selected and offline available collection +- Switch to select if Mission or Collection based. +- Dropdown "Collection" to select a collection / mission - Button "get Collection devices from Sensor" - Button "store Collection devices locally" - Select a Mission from the new Sensor-Mission-Management to get a set of devices. -- Also input username und passwort on this page. "Test login on store even if not required here" +- Username und passwort. "Test login on store even if not required here" ## GNSS -- Checkbox on add event page which activates GNSS locationing. A field shall signal "no fix" or presision in meter. -The fields lat, long, elevation are updated automatically if checkbox is checked. +- Switch on add event page which activates GNSS locationing. A field shall signal "no fix" or presision in meter. +The fields lat, long, elevation and timestamp are updated automatically if checkbox is checked. # Input validation - a-z , A-Z , _ , 0-9 , ,(Comma) , ( , ) , + , - , . , : - -90 => Latitude <= +90 -180 => Longitude <= +180 Elevation: any numer + + +## TODOs +- FlutterSecureStorage for user password? + diff --git a/lib/addevent.dart b/lib/addevent.dart index a79a847a8e7478b580cbda202387690583b06978..9f8b64cb2fcca377742455eff600653407ee5b91 100644 --- a/lib/addevent.dart +++ b/lib/addevent.dart @@ -189,8 +189,9 @@ class _AddEventPageState extends State<AddEvent> { eventsStore.currentEvent.elevation = alt; var date = DateTime.now().toUtc(); - eventsStore.currentEvent.startDate = '$date'; - eventsStore.currentEvent.endDate = '$date'; + var isoDate = date.toIso8601String(); + eventsStore.currentEvent.startDate = isoDate; + eventsStore.currentEvent.endDate = isoDate; if(accuracy == 0.0){ gnssStatusText = "No-Fix"; @@ -315,9 +316,10 @@ class _AddEventPageState extends State<AddEvent> { showTitleActions: true, onConfirm: (date) { //Only one field for start and end date. - eventsStore.currentEvent.startDate = '$date'; - eventsStore.currentEvent.endDate = '$date'; - debugPrint('Date set to : $date'); + var isoDate = date.toIso8601String(); + eventsStore.currentEvent.startDate = isoDate; + eventsStore.currentEvent.endDate = isoDate; + debugPrint('Date set to : $isoDate'); setState(() {}); }, currentTime: DateTime.now().toUtc(), @@ -328,8 +330,9 @@ class _AddEventPageState extends State<AddEvent> { ElevatedButton( onPressed: () { var date = DateTime.now().toUtc(); - eventsStore.currentEvent.startDate = '$date'; - eventsStore.currentEvent.endDate = '$date'; + var isoDate = date.toIso8601String(); + eventsStore.currentEvent.startDate = isoDate; + eventsStore.currentEvent.endDate = isoDate; debugPrint('Date set to : ' + eventsStore.currentEvent.endDate.toString()); setState(() {}); @@ -468,8 +471,11 @@ class _AddEventPageState extends State<AddEvent> { //Update time for next event var date = DateTime.now().toUtc(); - eventsStore.currentEvent.startDate = '$date'; - eventsStore.currentEvent.endDate = '$date'; + var isoDate = date.toIso8601String(); + eventsStore.currentEvent.startDate = isoDate; + eventsStore.currentEvent.endDate = isoDate; + + debugPrint(date.toIso8601String()); } setState(() {}); }, diff --git a/lib/datamodel.dart b/lib/datamodel.dart index 2ab5425c05d664df4b4b23e9dc95c84073f51824..8c8da8fb3133ea991e8e96f6d88af9694d4db22e 100644 --- a/lib/datamodel.dart +++ b/lib/datamodel.dart @@ -88,19 +88,19 @@ class Event{ } Map<String, dynamic> toSensorJson() => { - 'itemID':id, - 'inheritToAllChildren':'false', - 'inheritToChildren':[], - 'event':{ - 'startDate':startDate, - 'endDate':endDate, - 'label':label, - 'description':description, - 'eventType':type, - 'latitude':latitude, - 'longitude':longitude, - 'elevationInMeter':elevation, - 'id':0 + "\"itemID\"":"\"$id\"", + "\"inheritToAllChildren\"":"\"false\"", + "\"inheritToChildren\"":[], + "\"event\"":{ + "\"startDate\"":"\"$startDate\"", + "\"endDate\"":"\"$endDate\"", + "\"label\"":"\"$label\"", + "\"description\"":"\"$description\"", + "\"eventType\"":"\"$type\"", + "\"latitude\"":"\"$latitude\"", + "\"longitude\"":"\"$longitude\"", + "\"elevationInMeter\"":"\"$elevation\"", + "\"id\"":"\"0\"" } }; diff --git a/lib/viewevents.dart b/lib/viewevents.dart index 39f3d0160f5e1ba13eb34a2d9387314223c9a0d3..5e25506431cfdefe1667de4d08fa0dda6b5233dc 100644 --- a/lib/viewevents.dart +++ b/lib/viewevents.dart @@ -22,7 +22,12 @@ Future<bool> syncEvents() async { url = base_url + event.id.toString() + '?createVersion=false'; debugPrint('XXX ' + Uri.parse(url).toString()); final response = await http.put(Uri.parse(url), - headers: { "Accept" : "application/json"}, + + + headers: { + "Content-Type": "application/json", + "Cookie": "x-auth-token=72d9d4d20a33f87edca7e1ba01ce8db8" + }, body: event.toSensorJson().toString(), encoding: Encoding.getByName("utf-8"), ); @@ -39,13 +44,8 @@ Future<bool> syncEvents() async { debugPrint('Header: ' + response.headers.toString()); debugPrint('Body: ' + response.body.toString()); debugPrint('StatusCode: ' + response.statusCode.toString()); - throw Exception('Failed to login'); + throw Exception('Failed to put.'); } - - - - - } }