Skip to content
Snippets Groups Projects
databaseconnector.dart 3.23 KiB
Newer Older
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'dart:async';
import 'datamodel.dart';

  static const String eventDatabase = 'mobileEventLog.db';
  static const String eventTable = 'events';
  dynamic database;

  Future<void> connect() async {
    database = openDatabase(

      join(await getDatabasesPath(), eventDatabase),

      // When the database is first created, create a table to store the events.
      onCreate: (db, version) {
        return db.execute(
          'CREATE TABLE $eventTable(id INTEGER PRIMARY KEY, urnId INTEGER,urn TEXT, label TEXT, type TEXT, typeId INTEGER, description TEXT, status TEXT, startDate TEXT, endDate TEXT, latitude REAL, longitude REAL, elevation REAL)',
        );
      },
      // Set the version. This executes the onCreate function and provides a
      // path to perform database upgrades and downgrades.
      version: 1,
    );
  }


  //Can also be used to update an existing event. In this case ensure that id is not 0!
  Future<void> insertEvent(Event event) async {
      final db = await database;
      await db.insert(
        eventTable,
        event.toMap(),
        conflictAlgorithm: ConflictAlgorithm.replace,
      );
  }

  Future<List<Event>> getEvents() async {
    // Get a reference to the database.
    final db = await database;

    final List<Map<String, dynamic>> maps = await db.query(eventTable);

    // Convert the List<Map<String, dynamic> into a List<Event>.
    return List.generate(maps.length, (i) {
      return Event(
        id: maps[i]['id'],
        urnId: maps[i]['urnId'],
        urn: maps[i]['urn'],
        label: maps[i]['label'],
        type: maps[i]['type'],
        typeId: maps[i]['typeId'],
        description: maps[i]['description'],
        status: maps[i]['status'],
        startDate: maps[i]['startDate'],
        endDate: maps[i]['endDate'],
        latitude: maps[i]['latitude'],
        longitude: maps[i]['longitude'],
        elevation: maps[i]['elevation'],
      );
    });
  }


  // A method that retrieves all the dogs from the dogs table.
  Future<List<Event>> getPendingEvents() async {
    // Get a reference to the database.
    final db = await database;

    final List<Map<String, dynamic>> maps = await db.query(eventTable, where: '"status" = "PENDING"');

    // Convert the List<Map<String, dynamic> into a List<Event>.
    return List.generate(maps.length, (i) {
      return Event(
        id: maps[i]['id'],
        urnId: maps[i]['urnId'],
        urn: maps[i]['urn'],
        label: maps[i]['label'],
        type: maps[i]['type'],
        typeId: maps[i]['typeId'],
        description: maps[i]['description'],
        status: maps[i]['status'],
        startDate: maps[i]['startDate'],
        endDate: maps[i]['endDate'],
        latitude: maps[i]['latitude'],
        longitude: maps[i]['longitude'],
        elevation: maps[i]['elevation'],
      );
    });
  }

}






/*
*   int id;  // Device URN id
  String urn;
  String label;
  String type; // Event type name  TODO: this should be an EventType variable
  int typeId;
  String description;
  String status;
  String startDate;
  String endDate;
  String latitude;
  String longitude;
  String elevation;
*
*
* */