diff --git a/lib/addevent.dart b/lib/addevent.dart new file mode 100644 index 0000000000000000000000000000000000000000..8264b1da29fcacbf62d80e039f0a9b61b19ae8d3 --- /dev/null +++ b/lib/addevent.dart @@ -0,0 +1,98 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'datamodel.dart'; + +class AddEvent extends StatelessWidget { + @override + Widget build(BuildContext context) { + final EventTypeStoreInstance eventTypes = EventTypeStoreInstance(); + + return Scaffold( + appBar: AppBar(title: const Text("Add Event")), + body: + Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: <Widget>[ + TextFormField( + decoration: const InputDecoration( + labelText: 'Label' + ), + ), + DropdownButtonFormField( + decoration: const InputDecoration( + labelText: 'Event Type', + ), + items: [ + DropdownMenuItem( + child: Text('Calibration'), + value: 'Calibration', + ), + DropdownMenuItem( + child: Text('Information'), + value: 'Information', + ) + ], + onChanged: (value) { + + } + ), + DropdownButtonFormField( + decoration: const InputDecoration( + labelText: 'URN', + ), + items: [ + DropdownMenuItem( + child: Text('ADCP'), + value: 'ADCP', + ), + DropdownMenuItem( + child: Text('EM712'), + value: 'EM712', + ) + ], + onChanged: (value) { + } + ), + TextFormField( + decoration: const InputDecoration( + labelText: 'Description' + ), + ), + TextFormField( + decoration: const InputDecoration( + labelText: 'Latitude' + ), + ), + TextFormField( + decoration: const InputDecoration( + labelText: 'Longitude' + ), + ), + TextFormField( + decoration: const InputDecoration( + labelText: 'Elevation' + ), + ) + ]), + bottomNavigationBar: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: const [ + FloatingActionButton( + heroTag: null, + onPressed: null, + tooltip: 'Get GNSS from device', + child: Icon(Icons.my_location), + ), + SizedBox(width: 50), + FloatingActionButton( + heroTag: null, + onPressed: null, + tooltip: 'Add Event', + child: Icon(Icons.add), + ), + SizedBox(width: 20), + ], + ), + ); + } +} diff --git a/lib/configuration.dart b/lib/configuration.dart new file mode 100644 index 0000000000000000000000000000000000000000..15106e35c0fc2a91d1cb77c8583ec015d7cd0efb --- /dev/null +++ b/lib/configuration.dart @@ -0,0 +1,118 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + + +class Configuration extends StatefulWidget { + @override + State<Configuration> createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State<Configuration> { + int _counter = 0; + int _factor = 1; + + String selectedValue = '1'; + var available_items = [ + '1', + '10', + '100', + ]; + + late Future<String> eventTypes; + + @override + void initState() { + super.initState(); + } + + void _incrementCounter() { + setState(() { + _counter = _counter + _factor; + }); + } + + void _decrementCounter() { + setState(() { + _counter = _counter - _factor; + }); + } + + void _resetCounter() { + setState(() { + _counter = 0; + }); + } + + void _getCollections() { + setState(() {}); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Configuration'), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: <Widget>[ + const Text( + 'You have pushed the button this many times:', + ), + Text( + '$_counter', + style: Theme.of(context).textTheme.headline2, + ), + DropdownButton( + value: selectedValue, + icon: const Icon(Icons.keyboard_arrow_down), + items: available_items.map((String available_items) { + return DropdownMenuItem( + value: available_items, + child: Text(available_items), + ); + }).toList(), + onChanged: (String? newValue) { + setState(() { + selectedValue = newValue!; + _factor = int.parse(selectedValue); + }); + }, + ), + Text('blabla'), + ], + ), + ), + bottomNavigationBar: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + FloatingActionButton( + heroTag: null, + onPressed: _incrementCounter, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), + FloatingActionButton( + heroTag: null, + onPressed: _decrementCounter, + tooltip: 'Decrement', + child: const Text('-'), + ), + FloatingActionButton( + heroTag: null, + onPressed: _resetCounter, + tooltip: 'Reset to 0', + child: const Icon(Icons.delete), + ), + FloatingActionButton( + heroTag: null, + onPressed: _getCollections, + tooltip: 'Reset to 0', + child: const Text('Update'), + ), + ], + ), + ); + } +} diff --git a/lib/data_model.dart b/lib/datamodel.dart similarity index 52% rename from lib/data_model.dart rename to lib/datamodel.dart index 5c914b7cb93b50b3d1012875fe02af00bab04732..0896f73adcf62478b60afd720a0c9c8a70c151f4 100644 --- a/lib/data_model.dart +++ b/lib/datamodel.dart @@ -34,24 +34,49 @@ class Event{ abstract class EventStoreBase{ List<Event> store = []; +} + - //void setStore(List<Event> st){ - // store = st; - //} - //void reset(){ - // store = []; - //} -} class EventType{ - String name; int id; + String name; + + EventType( + this.id, + this.name + ); + + factory EventType.fromJson(Map<String, dynamic> parsedJson){ + return EventType(parsedJson['id'] as int, parsedJson['name'] as String); + } +} + +abstract class EventTypeStoreBase{ + List<EventType> store = []; +} + +class EventStoreInstance extends EventStoreBase { + static final EventStoreInstance _instance = EventStoreInstance._internal(); + + factory EventStoreInstance() { + return _instance; + } - EventType({ - required this.name, - required this.id -}); + EventStoreInstance._internal() { + store = []; + } } +class EventTypeStoreInstance extends EventTypeStoreBase{ + static final EventTypeStoreInstance _instance = EventTypeStoreInstance._internal(); + factory EventTypeStoreInstance(){ + return _instance; + } + + EventTypeStoreInstance._internal(){ + store = []; + } +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 82b6fa3c9eff6e5fe0dad5614fe9e91574decfc1..7277b4be6d0d2ba011d816436ff7f11270df5998 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,22 +1,20 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'data_model.dart'; -class EventStoreInstance extends EventStoreBase { - static final EventStoreInstance _instance = EventStoreInstance._internal(); +import 'datamodel.dart'; +import 'addevent.dart'; +import 'viewevents.dart'; +import 'overview.dart'; +import 'configuration.dart'; - factory EventStoreInstance() { - return _instance; - } - EventStoreInstance._internal() { - store = []; - } -} void main() { - //Add some dummy events to eventstore + EventStoreInstance events = EventStoreInstance(); + EventTypeStoreInstance eventTypes = EventTypeStoreInstance(); + + //Add some dummy events to eventstore events.store.add(Event.fromJson({ 'id': 8311, 'urn': 'station:neumayer_iii:awi_snow_sampler_1', @@ -49,6 +47,13 @@ void main() { 'description': 'Remi tool Tag1 1 Traverse', 'status': 'PENDING' })); + + //Add some dummy eventtypes. TODO: request from https://sensor.awi.de/rest/sensors/events/getAllEventTypes + eventTypes.store.add(EventType.fromJson({'id': 317, 'name':'Configuration'})); + eventTypes.store.add(EventType.fromJson({'id': 216, 'name':'Decommissioned'})); + eventTypes.store.add(EventType.fromJson({'id': 187, 'name':'Deployment'})); + eventTypes.store.add(EventType.fromJson({'id': 50, 'name':'Information'})); + eventTypes.store.add(EventType.fromJson({'id': 16, 'name':'Maintenance'})); runApp(MaterialApp( title: 'Mobile Event Log', @@ -65,337 +70,7 @@ void main() { )); } -class Overview extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: const Text('Mobile Event Log')), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: <Widget>[ - ElevatedButton( - child: const Text('Add Event'), - onPressed: () { - Navigator.pushNamed(context, '/second'); - }, - ), - ElevatedButton( - child: const Text('View Added Events'), - onPressed: () { - Navigator.pushNamed(context, '/third'); - }, - ), - ElevatedButton( - child: const Text('Configuration'), - onPressed: () { - Navigator.pushNamed(context, '/forth'); - }, - ), - ], - )), - ); - } -} - -class AddEvent extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: const Text("Add Event")), - body: - Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: <Widget>[ - TextFormField( - decoration: InputDecoration( - labelText: 'Label' - ), - ), - DropdownButtonFormField( - decoration: InputDecoration( - labelText: 'Event Type', - ), - items: [ - DropdownMenuItem( - child: Text('Calibration'), - value: 'Calibration', - ), - DropdownMenuItem( - child: Text('Information'), - value: 'Information', - ) - ], - onChanged: (value) { - } - ), - DropdownButtonFormField( - decoration: InputDecoration( - labelText: 'URN', - ), - items: [ - DropdownMenuItem( - child: Text('ADCP'), - value: 'ADCP', - ), - DropdownMenuItem( - child: Text('EM712'), - value: 'EM712', - ) - ], - onChanged: (value) { - } - ), - TextFormField( - decoration: InputDecoration( - labelText: 'Description' - ), - ), - TextFormField( - decoration: InputDecoration( - labelText: 'Latitude' - ), - ), - TextFormField( - decoration: InputDecoration( - labelText: 'Longitude' - ), - ), - TextFormField( - decoration: InputDecoration( - labelText: 'Elevation' - ), - ) - ]), - bottomNavigationBar: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: const [ - FloatingActionButton( - heroTag: null, - onPressed: null, - tooltip: 'Add Event locally', - child: Icon(Icons.add), - ) - ], - ), - ); - } -} -class ViewEvents extends StatelessWidget { - @override - Widget build(BuildContext context) { - // Get singleton to access locally stored events: - final EventStoreInstance events = EventStoreInstance(); - return Scaffold( - appBar: AppBar( - title: const Text("View Added Events"), - ), - body: SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: SingleChildScrollView( - scrollDirection: Axis.vertical, - child: DataTable( - columns: const <DataColumn>[ - DataColumn( - label: Text( - 'Id', - style: TextStyle(fontStyle: FontStyle.italic), - ), - ), - DataColumn( - label: Text( - 'URN', - style: TextStyle(fontStyle: FontStyle.italic), - ), - ), - DataColumn( - label: Text( - 'Label', - style: TextStyle(fontStyle: FontStyle.italic), - ), - ), - DataColumn( - label: Text( - 'Type', - style: TextStyle(fontStyle: FontStyle.italic), - ), - ), - DataColumn( - label: Text( - 'Description', - style: TextStyle(fontStyle: FontStyle.italic), - ), - ), - DataColumn( - label: Text( - 'Status', - style: TextStyle(fontStyle: FontStyle.italic), - ), - ), - ], - rows: <DataRow>[ - for (var event in events.store) - DataRow( - cells: <DataCell>[ - DataCell(Text(event.id.toString())), - DataCell(Text(event.urn)), - DataCell( - TextFormField( - initialValue: event.label, - onFieldSubmitted: (val) { - event.label = val; //Update Database - }, - ), - ), - DataCell(Text(event.type)), - DataCell( - TextFormField( - initialValue: event.description, - onFieldSubmitted: (val) { - event.description = val; //Update Database - }, - ), - ), - DataCell( - DropdownButtonFormField( - //value: Text('abe'), - items: <DropdownMenuItem>[ - DropdownMenuItem( - child: Text('abs'), - value: Text('1'), - ), - DropdownMenuItem( - child: Text('abc'), - value: Text('1'), - ), - ], - onChanged: null, - ), - ), - ], - ), - ], - ), - ), - ), - ); - } -} - -class Configuration extends StatefulWidget { - @override - State<Configuration> createState() => _MyHomePageState(); -} -class _MyHomePageState extends State<Configuration> { - int _counter = 0; - int _factor = 1; - - String selectedValue = '1'; - var available_items = [ - '1', - '10', - '100', - ]; - - late Future<String> eventTypes; - - @override - void initState() { - super.initState(); - } - - void _incrementCounter() { - setState(() { - _counter = _counter + _factor; - }); - } - - void _decrementCounter() { - setState(() { - _counter = _counter - _factor; - }); - } - - void _resetCounter() { - setState(() { - _counter = 0; - }); - } - - void _getCollections() { - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text('Configuration'), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: <Widget>[ - const Text( - 'You have pushed the button this many times:', - ), - Text( - '$_counter', - style: Theme.of(context).textTheme.headline2, - ), - DropdownButton( - value: selectedValue, - icon: const Icon(Icons.keyboard_arrow_down), - items: available_items.map((String available_items) { - return DropdownMenuItem( - value: available_items, - child: Text(available_items), - ); - }).toList(), - onChanged: (String? newValue) { - setState(() { - selectedValue = newValue!; - _factor = int.parse(selectedValue); - }); - }, - ), - Text('blabla'), - ], - ), - ), - bottomNavigationBar: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - FloatingActionButton( - heroTag: null, - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), - FloatingActionButton( - heroTag: null, - onPressed: _decrementCounter, - tooltip: 'Decrement', - child: const Text('-'), - ), - FloatingActionButton( - heroTag: null, - onPressed: _resetCounter, - tooltip: 'Reset to 0', - child: const Icon(Icons.delete), - ), - FloatingActionButton( - heroTag: null, - onPressed: _getCollections, - tooltip: 'Reset to 0', - child: const Text('Update'), - ), - ], - ), - ); - } -} diff --git a/lib/overview.dart b/lib/overview.dart new file mode 100644 index 0000000000000000000000000000000000000000..1eb727f94336140214e3025734eeac2c78319c65 --- /dev/null +++ b/lib/overview.dart @@ -0,0 +1,35 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class Overview extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('Mobile Event Log')), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: <Widget>[ + ElevatedButton( + child: const Text('Add Event'), + onPressed: () { + Navigator.pushNamed(context, '/second'); + }, + ), + ElevatedButton( + child: const Text('View Added Events'), + onPressed: () { + Navigator.pushNamed(context, '/third'); + }, + ), + ElevatedButton( + child: const Text('Configuration'), + onPressed: () { + Navigator.pushNamed(context, '/forth'); + }, + ), + ], + )), + ); + } +} \ No newline at end of file diff --git a/lib/viewevents.dart b/lib/viewevents.dart new file mode 100644 index 0000000000000000000000000000000000000000..a4ab274a78b21ad506935b56910384369162bbfc --- /dev/null +++ b/lib/viewevents.dart @@ -0,0 +1,104 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'datamodel.dart'; + +class ViewEvents extends StatelessWidget { + @override + Widget build(BuildContext context) { + // Get singleton to access locally stored events: + final EventStoreInstance events = EventStoreInstance(); + return Scaffold( + appBar: AppBar( + title: const Text("View Added Events"), + ), + body: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: SingleChildScrollView( + scrollDirection: Axis.vertical, + child: DataTable( + columns: const <DataColumn>[ + DataColumn( + label: Text( + 'Id', + style: TextStyle(fontStyle: FontStyle.italic), + ), + ), + DataColumn( + label: Text( + 'URN', + style: TextStyle(fontStyle: FontStyle.italic), + ), + ), + DataColumn( + label: Text( + 'Label', + style: TextStyle(fontStyle: FontStyle.italic), + ), + ), + DataColumn( + label: Text( + 'Type', + style: TextStyle(fontStyle: FontStyle.italic), + ), + ), + DataColumn( + label: Text( + 'Description', + style: TextStyle(fontStyle: FontStyle.italic), + ), + ), + DataColumn( + label: Text( + 'Status', + style: TextStyle(fontStyle: FontStyle.italic), + ), + ), + ], + rows: <DataRow>[ + for (var event in events.store) + DataRow( + cells: <DataCell>[ + DataCell(Text(event.id.toString())), + DataCell(Text(event.urn)), + DataCell( + TextFormField( + initialValue: event.label, + onFieldSubmitted: (val) { + event.label = val; //Update Database + }, + ), + ), + DataCell(Text(event.type)), + DataCell( + TextFormField( + initialValue: event.description, + onFieldSubmitted: (val) { + event.description = val; //Update Database + }, + ), + ), + DataCell( + DropdownButtonFormField( + //value: Text('abe'), + items: <DropdownMenuItem>[ + DropdownMenuItem( + child: Text('abs'), + value: Text('1'), + ), + DropdownMenuItem( + child: Text('abc'), + value: Text('1'), + ), + ], + onChanged: null, + ), + ), + ], + ), + ], + ), + ), + ), + ); + } +} \ No newline at end of file