Skip to content
Snippets Groups Projects
configuration.dart 9.25 KiB
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'datamodel.dart';
import 'sensorconnector.dart';
import 'databaseconnector.dart';
import 'package:shared_preferences/shared_preferences.dart';

class Configuration extends StatefulWidget {
  const Configuration({Key? key}) : super(key: key);

  @override
  State<Configuration> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<Configuration> {
  late Future<Collection> futureCollection;
  late Future<List<Collection>> futureCollections;
  late Future<List<EventType>> futureEventTypes;
  late Future<List<Device>> futureDevices;
  late Future<String> futureAuthToken;

  SensorConnector connector = SensorConnector();
  final ConfigurationStoreInstance configuration = ConfigurationStoreInstance();

  Future<void> updateConfiguration() async {
    final EventStoreInstance event = EventStoreInstance();

    futureAuthToken.then((value){ //NOTE: Counterintuitive async callback function
      debugPrint("Login credentials correct! Auth Token: " + value);

      futureDevices.then((value) {
        debugPrint("Device List complete");
        configuration.devices = value;

        futureEventTypes.then((value) async {
          debugPrint("Event Types List complete");
          configuration.eventTypes = value;

          debugPrint("EventType Json: " + jsonEncode(
              configuration.eventTypes[0]));
          debugPrint("Device Json: " + jsonEncode(
              configuration.devices[0]));
          debugPrint("Current Collection Json: " + jsonEncode(
              configuration.currentCollection));
          debugPrint("Sensor Login Json: " + jsonEncode(
              configuration.loginInformation));

          try {
            //Update id and urn for the add event widget with some initial data
            event.currentEvent.id = 0;
            event.currentEvent.urnId = configuration.devices[0]
                .id; //TODO: fix if devices are an empty list.
            event.currentEvent.urn = configuration.devices[0].urn;
            event.currentEvent.description = '';
            event.currentEvent.label = '';
            event.currentEvent.type = configuration.eventTypes[0]
                .name;

            var date = DateTime.now().toUtc();
            var isoDate = date.toIso8601String();
            event.currentEvent.startDate = isoDate;
            event.currentEvent.endDate = isoDate;
            configuration.initialized = true;

            HapticFeedback.vibrate();
            //TODO: display success user feedback
            //TODO: store complete "configuration"
          } catch (e) {
            throw Exception('Something went wrong try again');