1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
import 'dart:io';
// ignore: depend_on_referenced_packages
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pmsna1/models/event.dart';
import 'package:pmsna1/models/post.dart';
import 'package:sqflite/sqflite.dart';
class DatabaseHelper {
static const dbName = "tecstagram.sql";
static const dbVersion = 2;
static Database? _database;
static Future<Database> _initDatabase() async {
String dir = Platform.isIOS
? (await getLibraryDirectory()).path
: await getDatabasesPath();
String dbDir = join(dir, dbName);
_database = await openDatabase(
dbDir,
version: dbVersion,
onCreate: _onCreate,
onUpgrade: ((db, oldVersion, newVersion) {
_onCreate(db, newVersion);
}),
onOpen: (db) {
_onCreate(db, 0);
},
);
return _database!;
}
Future<Database> get database async => _database ?? await _initDatabase();
static void _onCreate(Database db, int version) async {
await db.execute("""CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY,
description VARCHAR(500) NOT NULL,
date DATE NOT NULL
);""");
await db.execute("""CREATE TABLE IF NOT EXISTS events (
id INTEGER PRIMARY KEY,
description VARCHAR(500),
date DATE NOT NULL,
completed INT DEFAULT 0
);""");
}
Future<int> insert(String table, Map<String, dynamic> data) async {
Database conn = await database;
return conn.insert(table, data);
}
Future<int> update<T>(
String table, Map<String, dynamic> data, String columnId, T id) async {
Database conn = await database;
return conn.update(
table,
data,
where: "$columnId = ?",
whereArgs: [id],
);
}
Future<int> delete<T>(String table, String columnId, T id) async {
Database conn = await database;
return conn.delete(
table,
where: "$columnId = ?",
whereArgs: [id],
);
}
/*
* Post specific functions
*/
Future<List<Post>> getAllPost() async {
Database conn = await database;
List<Map<String, Object?>> result = await conn.query("posts");
return result.map((post) => Post.fromMap(post)).toList();
}
/*
* Event specific functions
*/
Future<List<Event>> getAllEvent() async {
Database conn = await database;
List<Map<String, Object?>> result = await conn.query("events");
return result.map((event) => Event.fromMap(event)).toList();
}
}
|