From 5a88e76010f8cee0b5797ac36439b0edf47a6123 Mon Sep 17 00:00:00 2001 From: Maximilian Betz <Maximilian.Betz@awi.de> Date: Wed, 19 Jan 2022 16:05:36 +0100 Subject: [PATCH] adding events locally works basically --- lib/addevent.dart | 49 ++++++++++++++++++++++++++++---------- lib/datamodel.dart | 59 ++++++++++++++++++++++++++++++++++++---------- lib/main.dart | 13 +++++----- 3 files changed, 90 insertions(+), 31 deletions(-) diff --git a/lib/addevent.dart b/lib/addevent.dart index 52e4c3d..695550f 100644 --- a/lib/addevent.dart +++ b/lib/addevent.dart @@ -2,11 +2,29 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'datamodel.dart'; + class AddEvent extends StatelessWidget { + + void _storeCurrentEvent() { + final EventStoreInstance storedEvents = EventStoreInstance(); + final EventCurrentInstance currentEvent = EventCurrentInstance(); + storedEvents.store.add( + Event( + currentEvent.store.id, + currentEvent.store.urn, + currentEvent.store.label, + currentEvent.store.type, + currentEvent.store.description, + currentEvent.store.status, + )); + } + @override Widget build(BuildContext context) { /* Get singletons to access relevant data here.*/ final EventTypeStoreInstance eventTypes = EventTypeStoreInstance(); + final DeviceStoreInstance availableDevice = DeviceStoreInstance(); + final EventStoreInstance storedEvents = EventStoreInstance(); final EventCurrentInstance currentEvent = EventCurrentInstance(); return Scaffold( @@ -16,9 +34,13 @@ class AddEvent extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: <Widget>[ TextFormField( + initialValue: currentEvent.store.label, decoration: const InputDecoration( labelText: 'Label' ), + onChanged: (value) { + currentEvent.store.label = value; + }, ), DropdownButtonFormField( value: currentEvent.store.type, @@ -37,26 +59,29 @@ class AddEvent extends StatelessWidget { } ), DropdownButtonFormField( + value: currentEvent.store.urn, decoration: const InputDecoration( labelText: 'URN', ), - items: [ - DropdownMenuItem( - child: Text('ADCP'), - value: 'ADCP', - ), - DropdownMenuItem( - child: Text('EM712'), - value: 'EM712', - ) - ], + items: + availableDevice.store.map((Device device) { + return DropdownMenuItem( + value: device.urn, + child: Text(device.urn), + ); + }).toList(), onChanged: (value) { + currentEvent.store.urn = value.toString(); } ), TextFormField( + initialValue: currentEvent.store.description, decoration: const InputDecoration( labelText: 'Description' ), + onChanged: (value) { + currentEvent.store.description = value; + }, ), TextFormField( decoration: const InputDecoration( @@ -76,7 +101,7 @@ class AddEvent extends StatelessWidget { ]), bottomNavigationBar: Row( mainAxisAlignment: MainAxisAlignment.end, - children: const [ + children: [ FloatingActionButton( heroTag: null, onPressed: null, @@ -86,7 +111,7 @@ class AddEvent extends StatelessWidget { SizedBox(width: 50), FloatingActionButton( heroTag: null, - onPressed: null, + onPressed: _storeCurrentEvent, tooltip: 'Add Event', child: Icon(Icons.add), ), diff --git a/lib/datamodel.dart b/lib/datamodel.dart index 26944a3..86496ae 100644 --- a/lib/datamodel.dart +++ b/lib/datamodel.dart @@ -1,5 +1,22 @@ import 'package:shared_preferences/shared_preferences.dart'; +class Device{ + int id; + String urn; + + Device(this.id, this.urn); + + factory Device.fromJson(Map<String, dynamic> parsedJson){ + return Device( parsedJson['id'] as int, + parsedJson['urn'] as String); + } + + @override + String toString(){ + return '{ ${this.id}, ${this.urn} }'; + } +} + class Event{ int id; String urn; @@ -32,30 +49,33 @@ class Event{ } } -abstract class EventStoreBase{ - List<Event> store = []; -} - -abstract class EventCurrentBase{ - Event store = Event(0, 'urn0', '', '', '', 'PENDING'); -} - - - class EventType{ int id; String name; EventType( - this.id, - this.name - ); + this.id, + this.name + ); factory EventType.fromJson(Map<String, dynamic> parsedJson){ return EventType(parsedJson['id'] as int, parsedJson['name'] as String); } } + +abstract class DeviceStoreBase{ + List<Device> store = []; +} + +abstract class EventStoreBase{ + List<Event> store = []; +} + +abstract class EventCurrentBase{ + Event store = Event(0, 'urn0', '', '', '', 'PENDING'); +} + abstract class EventTypeStoreBase{ List<EventType> store = []; } @@ -94,4 +114,17 @@ class EventTypeStoreInstance extends EventTypeStoreBase{ EventTypeStoreInstance._internal(){ store = []; } +} + + +class DeviceStoreInstance extends DeviceStoreBase{ + static final DeviceStoreInstance _instance = DeviceStoreInstance._internal(); + + factory DeviceStoreInstance(){ + return _instance; + } + + DeviceStoreInstance._internal(){ + store = []; + } } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 18898d3..2f6118e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,19 +12,20 @@ void main() { EventStoreInstance events = EventStoreInstance(); EventTypeStoreInstance eventTypes = EventTypeStoreInstance(); EventCurrentInstance currentEvent = EventCurrentInstance(); + DeviceStoreInstance availableDevice = DeviceStoreInstance(); + + // Add some dummy devices + availableDevice.store.add(Device.fromJson({'id': 8311, 'urn':'station:neumayer_iii:awi_snow_sampler_1'})); + availableDevice.store.add(Device.fromJson({'id': 4086, 'urn':'acoustic_backscatter_sensor:test'})); // Create current event as basis when starting add event widget - currentEvent.store.urn = 'ADCP'; + currentEvent.store.urn = 'acoustic_backscatter_sensor:test'; currentEvent.store.id = 1234; currentEvent.store.description = 'blabla'; currentEvent.store.label = 'PS129_ABC'; currentEvent.store.type = 'Deployment'; - - - - - + //Add some dummy events to eventstore events.store.add(Event.fromJson({ 'id': 8311, -- GitLab