9 Commits
Joe ... Tito

Author SHA1 Message Date
Tito Arrigo
51f964833e boooooo 2023-09-29 10:25:34 +02:00
simonmaggini
5c68d85b98 listViw builder 2023-09-29 09:50:48 +02:00
Tito Arrigo
7d1bec6b0c grafica quasi finita 2023-09-29 08:28:08 +02:00
Tito Arrigo
c2824c99a4 merge 2023-09-28 13:04:42 +02:00
Tito Arrigo
e061871c4f grafica pagina TodayView.dart 2023-09-28 11:46:08 +02:00
Tito Arrigo
29a54bbcbc grafica pagina TodayView.dart 2023-09-28 09:49:09 +02:00
Tito Arrigo
330d0e4c61 Merge branch 'Tito' into dev 2023-09-27 14:04:34 +02:00
Tito Arrigo
6a05861341 inizzializazione pagine 2023-09-27 14:02:53 +02:00
Tito Arrigo
4006030f5b added GoggleServie-Info.plist 2023-09-27 13:48:10 +02:00
12 changed files with 320 additions and 165 deletions

View File

@@ -0,0 +1,25 @@
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

@@ -0,0 +1,40 @@
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

@@ -1,90 +1,103 @@
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 {
print("Initializing database"); // 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 (database.query(noteTable) != null) {
print("Database already created");
await database.execute('''CREATE TABLE promemoria ( }else{
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
// 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.'
) )
'''); ''');
@@ -96,7 +109,6 @@ class NoteDatabase {
creationDate, creationDate,
lastModificationDate, lastModificationDate,
expirationDate, expirationDate,
arrayPromemoria,
description, description,
priority, priority,
color color
@@ -105,7 +117,6 @@ 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'
@@ -119,7 +130,6 @@ class NoteDatabase {
creationDate, creationDate,
lastModificationDate, lastModificationDate,
expirationDate, expirationDate,
arrayPromemoria,
description, description,
priority, priority,
color color
@@ -128,7 +138,6 @@ 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'
@@ -150,42 +159,6 @@ 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;
@@ -194,61 +167,15 @@ class NoteDatabase {
return maps; return maps;
} }
Future<List<Map>> selectAllNotes() async { Future close() async {
final db = await database; final database = await instance.database;
database.close();
final List<Map<String, dynamic>> maps = await db.query(noteTable);
return maps;
} }
Future<void> createPromemoria( // WARNING: FOR DEV/TEST PURPOSES ONLY!!
Database database, Promemoria promemoria) async { Future<void> deleteDatabase() async {
await database.execute(''' final databasePath = await getDatabasesPath();
INSERT INTO promemoria ( final path = join(databasePath, 'note.db');
title, databaseFactory.deleteDatabase(path);
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,5 +3,4 @@ import 'myApp.dart';
void main() { void main() {
runApp(MyApp()); runApp(MyApp());
print("App started");
} }

View File

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

View File

@@ -5,14 +5,15 @@ 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 = '';
static String description = ''; 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(){
this.description = description;
}
} }

View File

@@ -4,14 +4,15 @@ 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,
primaryColor: Colors.red, colorSchemeSeed: Colors.blue,
), ),
home: Navigation() home: Navigation()
); );

View File

@@ -1,11 +1,10 @@
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});
@@ -16,12 +15,11 @@ class Navigation extends StatefulWidget {
class _NavigationState extends State<Navigation> { class _NavigationState extends State<Navigation> {
int _selectedIndex = 3; int _selectedIndex = 0;
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) {
@@ -33,20 +31,17 @@ class _NavigationState extends State<Navigation> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( body: SafeArea(child: _widgetOptions.elementAt(_selectedIndex)),
title: Text("BottomNavBar"),
),
body: Center(child: _widgetOptions.elementAt(_selectedIndex)),
bottomNavigationBar: BottomNavigationBar( bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[ items: const <BottomNavigationBarItem>[
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.calendar_today), label: "today"), icon: Icon(Icons.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,
currentIndex: _selectedIndex, onTap: _onItemTapped,
onTap: _onItemTapped, type: BottomNavigationBarType.fixed,
), ),
); );
} }

136
lib/pages/EditReminder.dart Normal file
View File

@@ -0,0 +1,136 @@
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,5 +1,8 @@
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});
@@ -10,9 +13,15 @@ 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 const Scaffold( return Scaffold(
body: Center( appBar: AppBar(
child: Icon(Icons.inbox), title: const Text('Inbox'),
),
body: ListView(
children: const <Widget>[
/* Reminder(),
Reminder(),*/
],
) )
); );
} }

View File

@@ -1,5 +1,10 @@
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});
@@ -8,12 +13,49 @@ 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 const Scaffold( return Scaffold(
body: Center( appBar: AppBar(
child: Icon(Icons.calendar_today) title: FilledButton(
) 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(),
],
),
); );
} }
} }

View File

@@ -29,14 +29,6 @@ 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(
@@ -44,8 +36,7 @@ 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)
], ],
) )
) )