-
Maximilian Betz authoredMaximilian Betz authored
databaseconnector.dart 3.95 KiB
import 'dart:convert';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'dart:async';
import 'datamodel.dart';
class DatabaseInstance extends DatabaseConnector {
static final DatabaseInstance _instance = DatabaseInstance
._internal();
factory DatabaseInstance() {
return _instance;
}
DatabaseInstance._internal();
}
abstract class DatabaseConnector{
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
version: 1,
);
}
Future<void> delete() async{
deleteDatabase(join(await getDatabasesPath(), eventDatabase)); //NOTE: deletes everything. Just use for debug!
await connect(); //Create a new and empty database
}
Future<int> addEvent(Event event) async {
int rowId = 0;
rowId = await database.insert(
eventTable,
event.toMapNoId(),
conflictAlgorithm: ConflictAlgorithm.fail,
);
return rowId;
}
// 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 {
final List<Map<String, dynamic>> maps = await database.query(eventTable);