Skip to content
Snippets Groups Projects
databaseconnector.dart 3.52 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 = await 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.
  Future<int> insertNewEvent(Event event) async {
      int rowId = 0;
      rowId = await database.insert(
        event.toMapNoId(),
        conflictAlgorithm: ConflictAlgorithm.fail,
  // Ensure the events id is the correct row id!
  Future<int> updateEvent(Event event) async {
    int rowId = 0;
    rowId = await database.insert(
      eventTable,
      event.toMap(),
      conflictAlgorithm: ConflictAlgorithm.replace,
    );
    return rowId;
  }
  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'].toString(),   //TODO: change datamodel to double values!
        longitude: maps[i]['longitude'].toString(),
        elevation: maps[i]['elevation'].toString(),

  // 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;
*
*
* */