Skip to content
Snippets Groups Projects
addevent.dart 5.37 KiB
Newer Older
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'datamodel.dart';
Maximilian Betz's avatar
Maximilian Betz committed
import 'dart:async';
import 'package:geolocator/geolocator.dart';
Maximilian Betz's avatar
Maximilian Betz committed
Future<Position> fetchPosition() async {
  Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
  print(position.longitude); //Output: 80.24599079
  print(position.latitude); //Output: 29.6593457
  print(position.altitude);

  String long = position.longitude.toString();
  String lat = position.latitude.toString();
  String alt = position.altitude.toString();

  return position;
}

class AddEvent extends StatefulWidget {
  @override
  State<AddEvent> createState() => _AddEventPageState();
}

class _AddEventPageState extends State<AddEvent>  {
  final List<bool> _isSelected = [true];

  @override
  void initState() {
    super.initState();
  }

  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',
                ),
Maximilian Betz's avatar
Maximilian Betz committed
                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'
              ),
Maximilian Betz's avatar
Maximilian Betz committed
            ),
            FutureBuilder<Position>(
                future: fetchPosition(),
                builder: (context, snapshot){
                  if (snapshot.hasData)
                  {
                    return Text(snapshot.data!.latitude.toString());
                  }
                  else{
                    return CircularProgressIndicator();
                  }
                }
            ),
          ]),
      bottomNavigationBar: Row(
        mainAxisAlignment: MainAxisAlignment.end,
Maximilian Betz's avatar
Maximilian Betz committed

          ToggleButtons(
            children: <Widget>[
              Icon(Icons.my_location),
            ],
            isSelected: _isSelected,
            onPressed: (int index) {
              setState(() {
                _isSelected[index] = !_isSelected[index];
              });
            },
          SizedBox(width: 50),
          FloatingActionButton(
            heroTag: null,
            onPressed: _storeCurrentEvent,
            tooltip: 'Add Event',
            child: Icon(Icons.add),
          ),
          SizedBox(width: 20),
        ],
      ),
    );
  }
}