diff --git a/lib/Components/EditReminderButton.dart b/lib/Components/EditReminderButton.dart new file mode 100644 index 0000000..cb38d88 --- /dev/null +++ b/lib/Components/EditReminderButton.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; +import '../pages/EditReminder.dart'; + +class EditReminderButton extends StatelessWidget{ + @override + Widget build(BuildContext context) { + return FilledButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => EditReminder()), + ); + }, + child: Icon(Icons.list), + ); + } +} diff --git a/lib/Components/Reminder.dart b/lib/Components/Reminder.dart new file mode 100644 index 0000000..c9da672 --- /dev/null +++ b/lib/Components/Reminder.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; + +import '../Components/EditReminderButton.dart'; + +class Reminder extends StatefulWidget { + const Reminder({super.key}); + + @override + State createState() => _ReminderState(); +} + +class _ReminderState extends State { + bool _value = false; + + void _onChanged(bool? newValue) { + setState(() { + _value = newValue ?? false; + }); + } + + @override + Widget build(BuildContext context) { + return ListTile( + leading: Checkbox( + value: _value, + onChanged: _onChanged, + ), + title: Text("Reminder"), + subtitle: Text(DateTime.now().toString()), + trailing: EditReminderButton(), + ); + } +} diff --git a/lib/database/database.dart b/lib/database/database.dart index 0dc22cc..0fc3052 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/note.dart b/lib/model/note.dart index ae3d498..d542561 100644 --- a/lib/model/note.dart +++ b/lib/model/note.dart @@ -7,8 +7,6 @@ class Note extends BaseEntity { static String title = BaseEntity.getTitle; static String creationDate = BaseEntity.getCreationDate; static String lastModificationDate = BaseEntity.getLastEditDate; + static String arrayPromemoria = ''; static String description = ''; - Map toMap() { - return {'id': id, 'title': title, 'desc': description,'CreationDate': creationDate, 'lastM': lastModificationDate }; - } } diff --git a/lib/model/promemoria.dart b/lib/model/promemoria.dart index 32f4ebc..5326c1d 100644 --- a/lib/model/promemoria.dart +++ b/lib/model/promemoria.dart @@ -1,23 +1,18 @@ -import 'dart:ui'; - import 'base_entity.dart'; import 'identifiers/enum/color.dart'; import 'identifiers/enum/priority.dart'; const String promemoriaTable = 'promemoria'; -class Promemoria extends BaseEntity{ +class Promemoria extends BaseEntity { static String id = BaseEntity.getId; static String title = BaseEntity.getTitle; static String creationDate = BaseEntity.getCreationDate; static String lastModificationDate = BaseEntity.getLastEditDate; static String expirationDate = ''; + static String arrayPromemoria = ''; static String description = ''; - static Priority priority = Priority.none; + static Color color = Color.none; - - - } - diff --git a/lib/myApp.dart b/lib/myApp.dart index 2f9d223..9cc3f55 100644 --- a/lib/myApp.dart +++ b/lib/myApp.dart @@ -10,7 +10,6 @@ class MyApp extends StatelessWidget { title: 'My App', theme: ThemeData( useMaterial3: true, - primaryColor: Colors.red, ), home: Navigation() ); diff --git a/lib/navigation.dart b/lib/navigation.dart index 147b894..6496828 100644 --- a/lib/navigation.dart +++ b/lib/navigation.dart @@ -1,3 +1,5 @@ +import 'dart:ffi'; + import 'package:flutter/material.dart'; import 'pages/testUI.dart'; import 'pages/TodayView.dart'; @@ -29,16 +31,17 @@ class _NavigationState extends State { @override Widget build(BuildContext context) { return Scaffold( - body: Center(child: _widgetOptions.elementAt(_selectedIndex)), + body: SafeArea(child: _widgetOptions.elementAt(_selectedIndex)), bottomNavigationBar: BottomNavigationBar( - items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.calendar_today), label: "today"), - BottomNavigationBarItem(icon: Icon(Icons.inbox), label: "Inbox"), - BottomNavigationBarItem(icon: Icon(Icons.note), label: "Notes"), - ], - currentIndex: _selectedIndex, - onTap: _onItemTapped, + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.today), label: "today"), + BottomNavigationBarItem(icon: Icon(Icons.inbox), label: "Inbox"), + BottomNavigationBarItem(icon: Icon(Icons.note), label: "Notes"), + ], + currentIndex: _selectedIndex, + onTap: _onItemTapped, + type: BottomNavigationBarType.fixed, ), ); } diff --git a/lib/pages/EditReminder.dart b/lib/pages/EditReminder.dart new file mode 100644 index 0000000..cc08858 --- /dev/null +++ b/lib/pages/EditReminder.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; + +class EditReminder extends StatefulWidget { + const EditReminder({super.key}); + + @override + State createState() => _EditReminderState(); +} + +class _EditReminderState extends State { + String _title = "ciaciao"; + String _description = "description"; + DateTime _date = DateTime.now(); + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text("Edit Reminder"), + ), + body: SafeArea( + child: Padding( + padding: EdgeInsets.all(16.0), + child: Column( + children: [ + TextField( + controller: TextEditingController(text: _title), + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: 'Title', + ), + ), + const SizedBox(height: 10), + Expanded(child: TextField( + onChanged: (text) { + setState(() { + _description = text; + }); + }, + controller: TextEditingController(text: _description), + decoration: const InputDecoration( + border: OutlineInputBorder(), + labelText: 'Description', + ), + maxLines: 6, + keyboardType: TextInputType.multiline, + ),), + const SizedBox(height: 10), + ], + ), + ) + ), + ); + } +} diff --git a/lib/pages/TodayView.dart b/lib/pages/TodayView.dart index cad5346..fe3db07 100644 --- a/lib/pages/TodayView.dart +++ b/lib/pages/TodayView.dart @@ -1,5 +1,9 @@ import 'package:flutter/material.dart'; +//import components +import '../Components/Reminder.dart'; +import '../Components/EditReminderButton.dart'; + class TodayView extends StatefulWidget { const TodayView({super.key}); @@ -10,10 +14,11 @@ class TodayView extends StatefulWidget { class _TodayViewState extends State { @override Widget build(BuildContext context) { - return const Scaffold( - body: Center( - child: Icon(Icons.calendar_today) - ) + return ListView( + children: [ + Reminder(), + Reminder(), + ] ); } } diff --git a/lib/pages/test.dart b/lib/pages/test.dart new file mode 100644 index 0000000..7cda250 --- /dev/null +++ b/lib/pages/test.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:progetto_m335_flutter/database/database.dart'; +import 'package:progetto_m335_flutter/model/note.dart'; + +import '../database/database.dart'; + +class Test extends StatefulWidget { + const Test({super.key}); + + @override + State createState() => _TestState(); +} + +class _TestState extends State { + NoteDatabase noteDatabase = NoteDatabase.instance; + + Future _pressed() async { + print("Inserting demo data"); + final db = await noteDatabase.database; + + + } + + Future _printdata() async { + final db = await noteDatabase.database; + + print("Printing data"); + print(await db.query(noteTable)); + print("Data printed"); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Column( + children: [ + FloatingActionButton(onPressed: _pressed), + FloatingActionButton(onPressed: _printdata) + ], + ) + ) + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 5ee74ca..818a39c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,6 +37,9 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 firebase_core: ^2.16.0 + sqflite: ^2.3.0 + path: ^1.8.3 + sqflite_common_ffi: ^2.3.0+2 dev_dependencies: flutter_test: diff --git a/test/widget_test.dart b/test/widget_test.dart index 1c66089..c3d670a 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:progetto_m335_flutter/main.dart'; +import 'package:progetto_m335_flutter/myApp.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async {