10 Commits

Author SHA1 Message Date
grata
a58721a6f4 crud 2023-09-28 13:57:21 +02:00
64b4f64f8c work in progress database 2023-09-28 13:38:09 +02:00
52d7defb75 entity upgrade 2023-09-28 11:47:01 +02:00
782bbebce9 database init 2023-09-28 11:38:19 +02:00
05386ac20f entity 2023-09-28 08:47:50 +02:00
9f26bc8595 note entity 2023-09-27 15:17:16 +02:00
Tito Arrigo
c35684c8f1 inizzializazione pagine 2023-09-27 14:17:52 +02:00
205f575db5 Merge remote-tracking branch 'origin/dev' into Joe 2023-09-27 13:52:34 +02:00
ecf7011302 new directory 2023-09-27 13:50:56 +02:00
58e013a709 database 2023-09-27 13:43:04 +02:00
12 changed files with 288 additions and 309 deletions

View File

@@ -1,25 +0,0 @@
import 'package:flutter/material.dart';
class QuickReminder extends StatefulWidget {
const QuickReminder({super.key});
@override
State<QuickReminder> createState() => _QuickReminderState();
}
class _QuickReminderState extends State<QuickReminder> {
@override
Widget build(BuildContext context) {
return const ListTile(
leading: Checkbox(
value: false,
onChanged: null,
),
title: TextField(
decoration: InputDecoration(
labelText: 'New Reminder',
),
),
);
}
}

View File

@@ -1,40 +0,0 @@
import 'package:flutter/material.dart';
import '../model/promemoria.dart';
import '../pages/EditReminder.dart';
class Reminder extends StatefulWidget {
final Promemoria? promemoria;
const Reminder(this.promemoria, {super.key});
@override
State<Reminder> createState() => _ReminderState();
}
class _ReminderState extends State<Reminder> {
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(widget.promemoria?.description ?? 'Nessun titolo'),
subtitle: Text(DateTime.now().toString()),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => EditReminder(widget.promemoria)),
);
},
);
}
}

View File

@@ -22,55 +22,63 @@ class NoteDatabase {
} }
Future<Database> _initDB(String filePath) async { Future<Database> _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(); 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 (await isDatabaseExists()) {
if (database.query(noteTable) != null) {
print("Database already created"); print("Database already created");
deleteDatabase();
print("Database deleted");
}
}else{ await database.execute('''CREATE TABLE promemoria (
print("demo data inserting");
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
); );
'''); ''');
await database.execute('''CREATE TABLE note ( await database.execute('''CREATE TABLE note (
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,
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
var nota = Note();
nota.setTitle("Nota 1");
nota.setCreationDate("2023-09-56");
nota.setLastModificationDate("2023-09-56");
nota.setArrayPromemoria("1,2,3,4,5");
nota.setDescription("Questo è un esempio di nota 1.");
await createNote(database, nota);
print(await readNote(1));
nota.setDescription("ciao");
await updateNote (nota);
print(await readNote (1));
// Add fake categories // Add fake categories
await database.execute(''' await database.execute('''
@@ -78,6 +86,7 @@ class NoteDatabase {
title, title,
creationDate, creationDate,
lastModificationDate, lastModificationDate,
arrayPromemoria,
description description
) VALUES ( ) VALUES (
'Nota 2', 'Nota 2',
@@ -87,12 +96,12 @@ class NoteDatabase {
) )
'''); ''');
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',
@@ -109,6 +118,7 @@ class NoteDatabase {
creationDate, creationDate,
lastModificationDate, lastModificationDate,
expirationDate, expirationDate,
arrayPromemoria,
description, description,
priority, priority,
color color
@@ -130,6 +140,7 @@ class NoteDatabase {
creationDate, creationDate,
lastModificationDate, lastModificationDate,
expirationDate, expirationDate,
arrayPromemoria,
description, description,
priority, priority,
color color
@@ -159,6 +170,27 @@ class NoteDatabase {
} }
} }
Future close() async {
final database = await instance.database;
database.close();
}
Future<void> deleteDatabase() async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'note.db');
databaseFactory.deleteDatabase(path);
}
Future<bool> isDatabaseExists() async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'note.db');
// Apre il database in modalità sola lettura.
Database database = await openDatabase(path, readOnly: true);
// Restituisce true se il database è stato aperto correttamente, altrimenti false.
return database.isOpen;
}
Future<List<Map>> selectAllPromemoria() async { Future<List<Map>> selectAllPromemoria() async {
final db = await database; final db = await database;
@@ -167,15 +199,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> createNote(Database database, Note note) async {
Future<void> deleteDatabase() async { await database.insert(
final databasePath = await getDatabasesPath(); 'note',
final path = join(databasePath, 'note.db'); note.toMap(),
databaseFactory.deleteDatabase(path); conflictAlgorithm: ConflictAlgorithm.replace,
);
print('note $note.title inserted');
}
Future<void> createPromemoria(
Database database, Promemoria promemoria) async {
await database.insert(
'promemoria',
promemoria.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
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.toMap(),
where: 'id = ?', whereArgs: [promemoria.getId()]);
}
Future<void> updateNote(Note note) async {
final db = await database;
await db.update('note', note.toMap(),
where: 'id = ?', whereArgs: [note.getId()]);
} }
} }

View File

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

View File

@@ -1,8 +1,19 @@
abstract class BaseEntity{ abstract class BaseEntity{
String id = 'id'; static String id = 'id';
String title = 'Title'; static String title = 'Title';
String creationDate = 'CreationDate'; static String creationDate = 'CreationDate';
String lastEditDate = 'LastEditDate'; static String lastEditDate = 'LastEditDate';
BaseEntity(); static String get getId{
return id;
}
static String get getTitle{
return title;
}
static String get getCreationDate{
return creationDate;
}
static String get getLastEditDate{
return lastEditDate;
}
} }

View File

@@ -9,4 +9,63 @@ class Note extends BaseEntity {
static String lastModificationDate = BaseEntity.getLastEditDate; static String lastModificationDate = BaseEntity.getLastEditDate;
static String arrayPromemoria = ''; static String arrayPromemoria = '';
static String description = ''; static String description = '';
Map<String, dynamic> toMap() {
return {
'id': id,
'title': title,
'creationDate': creationDate,
'lastModificationDate': lastModificationDate,
'arrayPromemoria': arrayPromemoria,
'description': description
};
}
String getId() {
return id;
}
void setId(String id) {
id = id;
}
String getTitle() {
return title;
}
void setTitle(String title) {
title = title;
}
String getCreationDate() {
return creationDate;
}
void setCreationDate(String creationDate) {
creationDate = creationDate;
}
String getLastModificationDate() {
return lastModificationDate;
}
void setLastModificationDate(String lastModificationDate) {
lastModificationDate = lastModificationDate;
}
String getArrayPromemoria() {
return arrayPromemoria;
}
void setArrayPromemoria(String arrayPromemoria) {
arrayPromemoria = arrayPromemoria;
}
String getDescription() {
return description;
}
void setDescription(String description) {
description = description;
}
} }

View File

@@ -5,15 +5,93 @@ import 'identifiers/enum/priority.dart';
const String promemoriaTable = 'promemoria'; 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 expirationDate = '';
static String arrayPromemoria = ''; static String arrayPromemoria = '';
String description = ''; static String description = '';
static Priority priority = Priority.none; static Priority priority = Priority.none;
static Color color = Color.none; static Color color = Color.none;
Promemoria(String description) : super(){ Map<String, dynamic> toMap() {
this.description = description; return {
'id': id,
'title': title,
'creationDate': creationDate,
'lastModificationDate': lastModificationDate,
'expirationDate': expirationDate,
'arrayPromemoria': arrayPromemoria,
'description': description,
'priority': priority,
'color': color,
};
} }
String getId(){
return id;
}
void setId(String id) {
id = id;
}
String getTitle() {
return title;
}
void setTitle(String title) {
title = title;
}
String getCreationDate() {
return creationDate;
}
void setCreationDate(String creationDate) {
creationDate = creationDate;
}
String getLastModificationDate() {
return lastModificationDate;
}
void setLastModificationDate(String lastModificationDate) {
lastModificationDate = lastModificationDate;
}
String getExpirationDate() {
return expirationDate;
}
void setExpirationDate(String expirationDate) {
expirationDate = expirationDate;
}
String getArrayPromemoria() {
return arrayPromemoria;
}
void setArrayPromemoria(String arrayPromemoria) {
arrayPromemoria = arrayPromemoria;
}
String getDescription() {
return description;
}
void setDescription(String description) {
description = description;
}
Priority getPriority() {
return priority;
}
void setPriority(Priority priority) {
priority = priority;
}
} }

View File

@@ -4,15 +4,14 @@ 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(
title: 'My App', title: 'My App',
theme: ThemeData( theme: ThemeData(
useMaterial3: true, useMaterial3: true,
colorSchemeSeed: Colors.blue, primaryColor: Colors.red,
), ),
home: Navigation() home: Navigation()
); );

View File

@@ -1,10 +1,11 @@
import 'dart:ffi'; import 'dart:ffi';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'pages/testUI.dart';
import 'pages/TodayView.dart'; import 'pages/TodayView.dart';
import 'pages/InboxView.dart'; import 'pages/InboxView.dart';
import 'pages/NotesView.dart'; import 'pages/NotesView.dart';
import 'pages/test.dart';
class Navigation extends StatefulWidget { class Navigation extends StatefulWidget {
const Navigation({super.key}); const Navigation({super.key});
@@ -15,11 +16,12 @@ class Navigation extends StatefulWidget {
class _NavigationState extends State<Navigation> { class _NavigationState extends State<Navigation> {
int _selectedIndex = 0; int _selectedIndex = 3;
static const List<Widget> _widgetOptions = <Widget>[ static const List<Widget> _widgetOptions = <Widget>[
TodayView(), TodayView(),
InboxView(), InboxView(),
NotesView(), NotesView(),
Test()
]; ];
void _onItemTapped(int index) { void _onItemTapped(int index) {
@@ -31,17 +33,20 @@ class _NavigationState extends State<Navigation> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
body: SafeArea(child: _widgetOptions.elementAt(_selectedIndex)), appBar: AppBar(
title: Text("BottomNavBar"),
),
body: Center(child: _widgetOptions.elementAt(_selectedIndex)),
bottomNavigationBar: BottomNavigationBar( bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[ items: const <BottomNavigationBarItem>[
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.today), label: "today"), icon: Icon(Icons.calendar_today), label: "today"),
BottomNavigationBarItem(icon: Icon(Icons.inbox), label: "Inbox"), BottomNavigationBarItem(icon: Icon(Icons.inbox), label: "Inbox"),
BottomNavigationBarItem(icon: Icon(Icons.note), label: "Notes"), BottomNavigationBarItem(icon: Icon(Icons.note), label: "Notes"),
], BottomNavigationBarItem(icon: Icon(Icons.settings), label: "Settings")
currentIndex: _selectedIndex, ],
onTap: _onItemTapped, currentIndex: _selectedIndex,
type: BottomNavigationBarType.fixed, onTap: _onItemTapped,
), ),
); );
} }

View File

@@ -1,136 +0,0 @@
import 'package:flutter/material.dart';
import '../model/promemoria.dart';
class EditReminder extends StatefulWidget {
final Promemoria? promemoria;
const EditReminder(this.promemoria, {super.key});
@override
State<EditReminder> createState() => _EditReminderState();
}
class _EditReminderState extends State<EditReminder> {
String _title = "ciaciao";
String _description = "description";
DateTime? _date;
//Arraylist of promemoria
bool _hasDate = true;
@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: <Widget>[
TextField(
controller: TextEditingController(text: widget.promemoria?.description ?? ""),
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Title',
),
),
const SizedBox(height: 10),
TextField(
onChanged: (text) {
setState(() {
_description = text;
});
},
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Description',
),
maxLines: 6,
keyboardType: TextInputType.multiline,
),
const SizedBox(height: 10),
Row(
children: [
FilledButton(
onPressed: () async {
DateTime? newDate = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(1),
lastDate: DateTime(9999));
if (newDate != null) {
setState(() {
_date = newDate;
});
}
},
child: Row(children: [
if (_date != null) Text("${_date?.day}/${_date?.month}/${_date?.year}"),
//if (_date == null) Text("Add Date"),
if (_date != null) const SizedBox(width: 10),
const Icon(Icons.calendar_month)
])),
if (_date != null) IconButton(
onPressed: () {
setState(() {
_date = null;
});
print("setting _date to ${_date}");
},
icon: Icon(Icons.close)),
if (_date == null) TextButton(
onPressed: () {
setState(() {
_date = DateTime.now();
});
print("setting _date to ${_date}");
},
child: const Row(
children: [
Icon(Icons.add),
SizedBox(width: 5),
Text("Add Today")
],
)
)
],
),
const SizedBox(height: 10),
const Spacer(),
Row(
children: [
Expanded(
child: FilledButton(
onPressed: () {
print("ciao");
},
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.red)),
child: const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.delete),
Text("Delete"),
],
)),
),
const SizedBox(width: 10),
Expanded(
child: FilledButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text("Save"),
),
),
],
)
],
),
)),
);
}
}

View File

@@ -1,8 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
//import components
import '../Components/Reminder.dart';
class InboxView extends StatefulWidget { class InboxView extends StatefulWidget {
const InboxView({super.key}); const InboxView({super.key});
@@ -13,15 +10,9 @@ class InboxView extends StatefulWidget {
class _InboxViewState extends State<InboxView> { class _InboxViewState extends State<InboxView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return const Scaffold(
appBar: AppBar( body: Center(
title: const Text('Inbox'), child: Icon(Icons.inbox),
),
body: ListView(
children: const <Widget>[
/* Reminder(),
Reminder(),*/
],
) )
); );
} }

View File

@@ -1,10 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
//import components
import '../Components/Reminder.dart';
import '../Components/QuickReminder.dart';
import '../model/promemoria.dart';
class TodayView extends StatefulWidget { class TodayView extends StatefulWidget {
const TodayView({super.key}); const TodayView({super.key});
@@ -13,49 +8,12 @@ class TodayView extends StatefulWidget {
} }
class _TodayViewState extends State<TodayView> { class _TodayViewState extends State<TodayView> {
var _selectedDate = DateTime.now();
List<Promemoria> listaPromemoria = [
new Promemoria("Primo promemoria"),
new Promemoria("Secondo promemoria"),
new Promemoria("Terzo promemoria"),
new Promemoria("Quarto promemoria"),
new Promemoria("Quinto promemoria"),
new Promemoria("Sesto promemoria"),
];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return const Scaffold(
appBar: AppBar( body: Center(
title: FilledButton( child: Icon(Icons.calendar_today)
onPressed: () async { )
DateTime? newDate = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime(1), lastDate: DateTime(9999));
if (newDate != null) {
setState(() {
_selectedDate = newDate;
});
}
},
child: Text(_selectedDate.day.toString() + "/" + _selectedDate.month.toString() + "/" + _selectedDate.year.toString())
),
),
body: ListView(
children: [
ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: listaPromemoria.length,
itemBuilder: (BuildContext context, int index){
return Reminder(
listaPromemoria[index]
);
},
),
QuickReminder(),
],
),
); );
} }
} }