import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'data_model.dart'; class EventStoreInstance extends EventStoreBase { static final EventStoreInstance _instance = EventStoreInstance._internal(); factory EventStoreInstance() { return _instance; } EventStoreInstance._internal() { store = []; } } void main() { //Add some dummy events to eventstore EventStoreInstance events = EventStoreInstance(); events.store.add(Event.fromJson({ 'id': 8311, 'urn': 'station:neumayer_iii:awi_snow_sampler_1', 'label': 'SML_KO21_SC01', 'type': 'Deployment', 'description': 'Remi tool Tag1 1 Traverse', 'status': 'PENDING' })); events.store.add(Event.fromJson({ 'id': 8311, 'urn': 'station:neumayer_iii:awi_snow_sampler_1', 'label': 'SML_KO21_SC01', 'type': 'Deployment', 'description': 'Remi tool Tag1 1 Traverse', 'status': 'PENDING' })); events.store.add(Event.fromJson({ 'id': 8311, 'urn': 'station:neumayer_iii:awi_snow_sampler_1', 'label': 'SML_KO21_SC01', 'type': 'Deployment', 'description': 'Remi tool Tag1 1 Traverse', 'status': 'PENDING' })); events.store.add(Event.fromJson({ 'id': 8311, 'urn': 'station:neumayer_iii:awi_snow_sampler_1', 'label': 'SML_KO21_SC01', 'type': 'Deployment', 'description': 'Remi tool Tag1 1 Traverse', 'status': 'PENDING' })); runApp(MaterialApp( title: 'Mobile Event Log', theme: ThemeData( primarySwatch: Colors.blue, ), initialRoute: '/', routes: { '/': (context) => Overview(), '/second': (context) => AddEvent(), '/third': (context) => ViewEvents(), '/forth': (context) => Configuration(), }, )); } 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'), ), ], ), ); } }