2 Commits
joe ... Joe

Author SHA1 Message Date
cd5803e6fe work in progress database 2023-09-28 14:23:23 +02:00
64b4f64f8c work in progress database 2023-09-28 13:38:09 +02:00
4 changed files with 118 additions and 34 deletions

View File

@@ -1,49 +1,40 @@
import 'package:path/path.dart'; import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
// Models // Models
import 'package:progetto_m335_flutter/model/note.dart'; import 'package:progetto_m335_flutter/model/note.dart';
import 'package:progetto_m335_flutter/model/promemoria.dart'; import 'package:progetto_m335_flutter/model/promemoria.dart';
import 'package:sqflite/sqflite.dart';
class NoteDatabase { class NoteDatabase {
static final NoteDatabase instance = NoteDatabase._init(); static final NoteDatabase instance = NoteDatabase._init();
static Database? _database; static Database? _database;
// Zero args constructor needed to extend this class
NoteDatabase();
NoteDatabase._init(); NoteDatabase._init();
Future<Database> get database async { Future<Database> get database async {
if (_database != null) return _database!; if (_database != null) return _database!;
_database = await _initDB('note.db'); _database = await _initDB('note.db');
return _database!; return _database!;
} }
Future<Database> _initDB(String filePath) async { Future<Database> _initDB(String filePath) async {
// On Android, it is typically data/data//databases. print("Initializing database");
// On iOS and MacOS, it is the Documents directory.
final databasePath = await getDatabasesPath(); final databasePath = await getDatabasesPath();
// Directory databasePath = await getApplicationDocumentsDirectory();
final path = join(databasePath, filePath); final path = join(databasePath, filePath);
return await openDatabase(path, version: 1, onCreate: _createDB); return await openDatabase(path, version: 1, onCreate: _createDB);
} }
Future _createDB(Database database, int version) async { Future _createDB(Database database, int version) async {
//check if the database is created
if (database.query(noteTable) != null) {
print("Database already created");
}else{
print("demo data inserting");
await database.execute('''CREATE TABLE promemoria ( await database.execute('''CREATE TABLE promemoria (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL, title TEXT NOT NULL,
creationDate TEXT NOT NULL, creationDate TEXT NOT NULL,
lastModificationDate TEXT, lastModificationDate TEXT,
expirationDate TEXT, expirationDate TEXT,
arrayPromemoria TEXT,
description TEXT, description TEXT,
priority TEXT, priority TEXT,
color TEXT color TEXT
@@ -55,49 +46,45 @@ class NoteDatabase {
title TEXT NOT NULL, title TEXT NOT NULL,
creationDate TEXT NOT NULL, creationDate TEXT NOT NULL,
lastModificationDate TEXT, lastModificationDate TEXT,
arrayPromemoria TEXT,
description TEXT description TEXT
); );
'''); ''');
print("database created"); print("database created");
}
await fillDemoData(database, version); await fillDemoData(database, version);
} }
Future fillDemoData(Database database, int version) async { Future fillDemoData(Database database, int version) async {
print("boh speriamo funzioni");
// Add some fake accounts
// Add fake categories // Add fake categories
await database.execute(''' await database.execute('''
INSERT INTO note ( INSERT INTO note (
title, title,
creationDate, creationDate,
lastModificationDate, lastModificationDate,
arrayPromemoria,
description description
) VALUES ( ) VALUES (
'Nota 2', 'Nota 2',
'2023-09-28', '2023-09-28',
'2023-09-28', '2023-09-28',
'',
'Questo è un esempio di nota 2.' 'Questo è un esempio di nota 2.'
) )
'''); ''');
await database.execute(''' await database.execute('''
INSERT INTO note ( INSERT INTO note (
title, title,
creationDate, creationDate,
lastModificationDate, lastModificationDate,
arrayPromemoria,
description description
) VALUES ( ) VALUES (
'Nota 2', 'Nota 2',
'2023-09-28', '2023-09-28',
'2023-09-28', '2023-09-28',
'',
'Questo è un esempio di nota 2.' 'Questo è un esempio di nota 2.'
) )
'''); ''');
@@ -109,6 +96,7 @@ class NoteDatabase {
creationDate, creationDate,
lastModificationDate, lastModificationDate,
expirationDate, expirationDate,
arrayPromemoria,
description, description,
priority, priority,
color color
@@ -117,6 +105,7 @@ class NoteDatabase {
'2023-09-27', '2023-09-27',
'2023-09-27', '2023-09-27',
'2023-10-05', '2023-10-05',
'',
'Questo è un esempio di promemoria 1.', 'Questo è un esempio di promemoria 1.',
'Alta', 'Alta',
'Rosso' 'Rosso'
@@ -130,6 +119,7 @@ class NoteDatabase {
creationDate, creationDate,
lastModificationDate, lastModificationDate,
expirationDate, expirationDate,
arrayPromemoria,
description, description,
priority, priority,
color color
@@ -138,6 +128,7 @@ class NoteDatabase {
'2023-09-28', '2023-09-28',
'2023-09-28', '2023-09-28',
'2023-10-10', '2023-10-10',
'',
'Questo è un esempio di promemoria 2.', 'Questo è un esempio di promemoria 2.',
'Media', 'Media',
'Verde' 'Verde'
@@ -159,6 +150,42 @@ class NoteDatabase {
} }
} }
Future close() async {
final database = await instance.database;
database.close();
}
Future<void> deleteDatabase() async {
try {
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'note.db');
databaseFactory.deleteDatabase(path);
} catch (error) {
throw Exception('DbBase.deleteDatabase: $error');
}
}
Future<void> createNote(Database database, Note note) async {
await database.execute('''
INSERT INTO note (
title,
creationDate,
lastModificationDate,
arrayPromemoria,
description,
) VALUES (
'$note.title}',
'$note.creationDate',
'$note.lastModificationDate',
'$note.arrayPromemoria.toString()',
'$note.description',
)
''');
print('note $note.title inserted');
}
Future<List<Map>> selectAllPromemoria() async { Future<List<Map>> selectAllPromemoria() async {
final db = await database; final db = await database;
@@ -167,15 +194,61 @@ class NoteDatabase {
return maps; return maps;
} }
Future close() async { Future<List<Map>> selectAllNotes() async {
final database = await instance.database; final db = await database;
database.close();
final List<Map<String, dynamic>> maps = await db.query(noteTable);
return maps;
} }
// WARNING: FOR DEV/TEST PURPOSES ONLY!! Future<void> createPromemoria(
Future<void> deleteDatabase() async { Database database, Promemoria promemoria) async {
final databasePath = await getDatabasesPath(); await database.execute('''
final path = join(databasePath, 'note.db'); INSERT INTO promemoria (
databaseFactory.deleteDatabase(path); title,
creationDate,
lastModificationDate,
expirationDate,
arrayPromemoria,
description,
priority,
color
) VALUES (
'$promemoria.title',
'$promemoria.creationDate',
'$promemoria.lastModificationDate',
'$promemoria.expirationDate',
'$promemoria.arrayPromemoria.toString()',
'$promemoria.description',
'$promemoria.priority',
'$promemoria.color'
)
''');
print('promemoria $promemoria.title inserted');
} }
Future<Map<String, Object?>> readPromemoria(int id) async {
final db = await database;
final results = await db.query('SELECT * FROM note where id=$id');
return results.first;
}
Future<Map<String, Object?>> readNote(int id) async {
final db = await database;
final results = await db.query('SELECT * FROM promemoria where id=$id');
return results.first;
}
// Future<void> updatePromemoria(Promemoria promemoria) async {
// final db = await database;
//await db.update('promemoria', promemoria, where: 'id = ?',
// Pass the Dog's id as a whereArg to prevent SQL injection.
// whereArgs: [dog.id],)
//}
} }

View File

@@ -3,4 +3,5 @@ import 'myApp.dart';
void main() { void main() {
runApp(MyApp()); runApp(MyApp());
print("App started");
} }

View File

@@ -4,6 +4,7 @@ import 'navigation.dart';
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
const MyApp({ Key? key }) : super(key: key); const MyApp({ Key? key }) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(

View File

@@ -29,6 +29,14 @@ class _TestState extends State<Test> {
print("Data printed"); print("Data printed");
} }
Future<void> _deletedatabase() async {
final db = await noteDatabase.database;
print("Deleting database");
await db.delete(noteTable);
print("Database deleted");
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@@ -36,7 +44,8 @@ class _TestState extends State<Test> {
child: Column( child: Column(
children: [ children: [
FloatingActionButton(onPressed: _pressed), FloatingActionButton(onPressed: _pressed),
FloatingActionButton(onPressed: _printdata) FloatingActionButton(onPressed: _printdata),
FloatingActionButton(onPressed: _deletedatabase)
], ],
) )
) )