diff --git a/lib/database/database.dart b/lib/database/database.dart index 0dc22cc..8d9aea3 100644 --- a/lib/database/database.dart +++ b/lib/database/database.dart @@ -1,32 +1,181 @@ import 'package:path/path.dart'; -import 'package:progetto_m335_flutter/model/note.dart'; import 'package:sqflite/sqflite.dart'; -class Database{ - static final Database _instance = Database._init(); +// Models +import 'package:progetto_m335_flutter/model/note.dart'; +import 'package:progetto_m335_flutter/model/promemoria.dart'; + +class NoteDatabase { + static final NoteDatabase instance = NoteDatabase._init(); static Database? _database; - Database._init(); + // Zero args constructor needed to extend this class + NoteDatabase(); - Future _createDB(Database database) async{ - const integerPrimaryKeyAutoincrement = 'INTEGER PRIMARY KEY AUTOINCREMENT'; - const textNotNull = 'TEXT NOT NULL'; - const integerNotNull = 'INTEGER NOT NULL'; - const integer = 'INTEGER'; - const real = 'REAL'; - const text = 'TEXT'; + NoteDatabase._init(); + + Future get database async { + if (_database != null) return _database!; + + _database = await _initDB('note.db'); + return _database!; + } + + Future _initDB(String filePath) async { + // On Android, it is typically data/data//databases. + // On iOS and MacOS, it is the Documents directory. + final databasePath = await getDatabasesPath(); + // Directory databasePath = await getApplicationDocumentsDirectory(); + + final path = join(databasePath, filePath); + return await openDatabase(path, version: 1, onCreate: _createDB); + } + + 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 ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + creationDate TEXT NOT NULL, + lastModificationDate TEXT, + expirationDate TEXT, + description TEXT, + priority TEXT, + color TEXT +); + '''); + + await database.execute('''CREATE TABLE note ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL, + creationDate TEXT NOT NULL, + lastModificationDate TEXT, + description TEXT +); + '''); + + print("database created"); + } + + + await fillDemoData(database, version); + } + + Future fillDemoData(Database database, int version) async { + + print("boh speriamo funzioni"); + // Add some fake accounts + + + // Add fake categories + await database.execute(''' + INSERT INTO note ( + title, + creationDate, + lastModificationDate, + description + ) VALUES ( + 'Nota 2', + '2023-09-28', + '2023-09-28', + 'Questo è un esempio di nota 2.' + ) +'''); await database.execute(''' - CREATE TABLE $Note ( - ${Note.id} $integerPrimaryKeyAutoincrement, - - ) - '''); + INSERT INTO note ( + title, + creationDate, + lastModificationDate, + description + ) VALUES ( + 'Nota 2', + '2023-09-28', + '2023-09-28', + 'Questo è un esempio di nota 2.' + ) +'''); + // Add currencies + await database.execute(''' + INSERT INTO promemoria ( + title, + creationDate, + lastModificationDate, + expirationDate, + description, + priority, + color + ) VALUES ( + 'Promemoria 1', + '2023-09-27', + '2023-09-27', + '2023-10-05', + 'Questo è un esempio di promemoria 1.', + 'Alta', + 'Rosso' + ) +'''); + + // Add fake budgets + await database.execute(''' + INSERT INTO promemoria ( + title, + creationDate, + lastModificationDate, + expirationDate, + description, + priority, + color + ) VALUES ( + 'Promemoria 2', + '2023-09-28', + '2023-09-28', + '2023-10-10', + 'Questo è un esempio di promemoria 2.', + 'Media', + 'Verde' + ) +'''); + print("Demo data inserted"); } - execute(String s) { + Future clearDatabase() async { + try { + await _database?.transaction((txn) async { + var batch = txn.batch(); + batch.delete(noteTable); + batch.delete(promemoriaTable); + await batch.commit(); + }); + } catch (error) { + throw Exception('DbBase.cleanDatabase: $error'); + } + } + Future> selectAllPromemoria() async { + final db = await database; + + final List> maps = await db.query(promemoriaTable); + + return maps; + } + + Future close() async { + final database = await instance.database; + database.close(); + } + + // WARNING: FOR DEV/TEST PURPOSES ONLY!! + Future deleteDatabase() async { + final databasePath = await getDatabasesPath(); + final path = join(databasePath, 'note.db'); + databaseFactory.deleteDatabase(path); } } diff --git a/lib/model/promemoria.dart b/lib/model/promemoria.dart index 32f4ebc..1d33319 100644 --- a/lib/model/promemoria.dart +++ b/lib/model/promemoria.dart @@ -18,6 +18,5 @@ class Promemoria extends BaseEntity{ static Color color = Color.none; - } diff --git a/lib/navigation.dart b/lib/navigation.dart index 147b894..6a33c26 100644 --- a/lib/navigation.dart +++ b/lib/navigation.dart @@ -3,6 +3,7 @@ import 'pages/testUI.dart'; import 'pages/TodayView.dart'; import 'pages/InboxView.dart'; import 'pages/NotesView.dart'; +import 'pages/test.dart'; class Navigation extends StatefulWidget { const Navigation({super.key}); @@ -13,11 +14,12 @@ class Navigation extends StatefulWidget { class _NavigationState extends State { - int _selectedIndex = 0; + int _selectedIndex = 3; static const List _widgetOptions = [ TodayView(), InboxView(), NotesView(), + Test() ]; void _onItemTapped(int index) { @@ -36,6 +38,7 @@ class _NavigationState extends State { icon: Icon(Icons.calendar_today), label: "today"), BottomNavigationBarItem(icon: Icon(Icons.inbox), label: "Inbox"), BottomNavigationBarItem(icon: Icon(Icons.note), label: "Notes"), + BottomNavigationBarItem(icon: Icon(Icons.settings), label: "Settings") ], currentIndex: _selectedIndex, onTap: _onItemTapped,