Skip to content
Snippets Groups Projects
addevent.dart 4.16 KiB
Newer Older
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,
        ));
  }

  //TODO: add field validators for freetext fields. Check allowed characters in sensor.awi.de
  //TODO: (Description, Label, Latitude, Longitude, Elevation, )

  @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(
      appBar: AppBar(title: const Text("Add Event")),
      body:
      Column(
          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,
                decoration: const InputDecoration(
                  labelText: 'Event Type',
                ),
                items:
                  eventTypes.store.map((EventType event) {
                    return DropdownMenuItem(
                      value: event.name,
                      child: Text(event.name),
                    );
                  }).toList(),
                onChanged: (value) {
                  currentEvent.store.type = value.toString();
                }
            ),
            DropdownButtonFormField(
                value: currentEvent.store.urn,
                decoration: const InputDecoration(
                  labelText: 'URN',
                ),
                items:
                availableDevice.store.map((Device device) {
                  return DropdownMenuItem(
                    value: device.urn,
                    child: Text(device.urn),
                  );
                }).toList(),
                onChanged: (value) {
                  currentEvent.store.urn = value.toString();
                  currentEvent.store.id = availableDevice.getDeviceIdFromUrn(value.toString());
              initialValue: currentEvent.store.description,
              decoration: const InputDecoration(
                  labelText: 'Description'
              ),
              onChanged: (value) {
                currentEvent.store.description = value;
              },
            ),
            TextFormField(
              decoration: const InputDecoration(
                  labelText: 'Latitude'
              ),
            ),
            TextFormField(
              decoration: const InputDecoration(
                  labelText: 'Longitude'
              ),
            ),
            TextFormField(
              decoration: const InputDecoration(
                  labelText: 'Elevation'
              ),
            )
          ]),
      bottomNavigationBar: Row(
        mainAxisAlignment: MainAxisAlignment.end,
          FloatingActionButton(
            heroTag: null,
            onPressed: null,
            tooltip: 'Get GNSS from device',
            child: Icon(Icons.my_location),
          ),
          SizedBox(width: 50),
          FloatingActionButton(
            heroTag: null,
            onPressed: _storeCurrentEvent,
            tooltip: 'Add Event',
            child: Icon(Icons.add),
          ),
          SizedBox(width: 20),
        ],
      ),
    );
  }
}