diff options
author | Iván Ávalos <avalos@disroot.org> | 2023-03-27 00:00:49 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2023-03-27 00:00:49 -0600 |
commit | 67bd958602705d834a031f4dfadb9dbe6633d54e (patch) | |
tree | 41938ee2ca45c12d87b9f2266fddd2043563d23f | |
parent | 4b7d33896879baba1435281f814766a80fbeecb2 (diff) | |
download | pmsna1-67bd958602705d834a031f4dfadb9dbe6633d54e.tar.gz pmsna1-67bd958602705d834a031f4dfadb9dbe6633d54e.tar.bz2 pmsna1-67bd958602705d834a031f4dfadb9dbe6633d54e.zip |
Paving the way for events
-rw-r--r-- | lib/database/helper.dart | 28 | ||||
-rw-r--r-- | lib/models/event.dart | 22 | ||||
-rw-r--r-- | lib/routes.dart | 2 | ||||
-rw-r--r-- | lib/screens/dashboard_screen.dart | 7 | ||||
-rw-r--r-- | lib/screens/events_screen.dart | 53 | ||||
-rw-r--r-- | pubspec.lock | 16 | ||||
-rw-r--r-- | pubspec.yaml | 1 |
7 files changed, 125 insertions, 4 deletions
diff --git a/lib/database/helper.dart b/lib/database/helper.dart index e684ee0..328ccf0 100644 --- a/lib/database/helper.dart +++ b/lib/database/helper.dart @@ -3,12 +3,13 @@ import 'dart:io'; // ignore: depend_on_referenced_packages import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:pmsna1/models/event.dart'; import 'package:pmsna1/models/post.dart'; import 'package:sqflite/sqflite.dart'; class DatabaseHelper { static const dbName = "tecstagram.sql"; - static const dbVersion = 1; + static const dbVersion = 2; static Database? _database; @@ -21,6 +22,9 @@ class DatabaseHelper { dbDir, version: dbVersion, onCreate: _onCreate, + onUpgrade: ((db, oldVersion, newVersion) { + _onCreate(db, newVersion); + }), ); return _database!; } @@ -28,11 +32,18 @@ class DatabaseHelper { Future<Database> get database async => _database ?? await _initDatabase(); static void _onCreate(Database db, int version) async { - await db.execute("""CREATE TABLE posts ( + await db.execute("""CREATE TABLE IF NOT EXISTS posts ( id INTEGER PRIMARY KEY, - description VARCHAR(500), - date DATE + description VARCHAR(500) NOT NULL, + date DATE NOT NULL );"""); + + await db.execute("""CREATE TABLE IF NOT EXISTS events ( + id INTEGER PRIMARY KEY, + description VARCHAR(500), + date DATE NOT NULL, + completed INT DEFAULT 0 + """); } Future<int> insert(String table, Map<String, dynamic> data) async { @@ -69,4 +80,13 @@ class DatabaseHelper { List<Map<String, Object?>> result = await conn.query("posts"); return result.map((post) => Post.fromMap(post)).toList(); } + + /* + * Event specific functions + */ + Future<List<Event>> getAllEvent() async { + Database conn = await database; + List<Map<String, Object?>> result = await conn.query("events"); + return result.map((event) => Event.fromMap(event)).toList(); + } } diff --git a/lib/models/event.dart b/lib/models/event.dart new file mode 100644 index 0000000..d9ef6f6 --- /dev/null +++ b/lib/models/event.dart @@ -0,0 +1,22 @@ +class Event { + final int id; + final String description; + final DateTime date; + final bool completed; + + const Event({ + required this.id, + required this.description, + required this.date, + required this.completed, + }); + + factory Event.fromMap(Map<String, dynamic> map) { + return Event( + id: map["id"], + description: map["description"], + date: DateTime.parse(map["date"]), + completed: map["date"] == 1, + ); + } +} diff --git a/lib/routes.dart b/lib/routes.dart index 81bf833..1d4284b 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pmsna1/screens/dashboard_screen.dart'; +import 'package:pmsna1/screens/events_screen.dart'; import 'package:pmsna1/screens/new_post_screen.dart'; import 'package:pmsna1/screens/onboarding_screen.dart'; import 'package:pmsna1/screens/popular_screen.dart'; @@ -14,6 +15,7 @@ Map<String, WidgetBuilder> getApplicationRoutes() { '/onboard': (BuildContext context) => const OnboardingScreen(), '/dash': (BuildContext context) => const DashboardScreen(), '/new': (BuildContext context) => const NewPostScreen(), + '/events': (BuildContext context) => const EventsScreen(), '/popular': (BuildContext context) => const PopularScreen(), }; } diff --git a/lib/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 9046878..03b84e7 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -45,6 +45,13 @@ class DashboardScreen extends StatelessWidget { }, ), ListTile( + title: const Text('Eventos'), + leading: const Icon(Icons.calendar_month), + onTap: () { + Navigator.of(context).pushNamed('/events'); + }, + ), + ListTile( title: const Text('Tema'), trailing: SegmentedButton<ThemeData?>( segments: [ diff --git a/lib/screens/events_screen.dart b/lib/screens/events_screen.dart new file mode 100644 index 0000000..60d1b26 --- /dev/null +++ b/lib/screens/events_screen.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:table_calendar/table_calendar.dart'; + +class EventsScreen extends StatefulWidget { + const EventsScreen({super.key}); + + @override + State<EventsScreen> createState() => _EventsScreenState(); +} + +class _EventsScreenState extends State<EventsScreen> { + DateTime _selectedDay = DateTime.now(); + DateTime _focusedDay = DateTime.now(); + CalendarFormat _calendarFormat = CalendarFormat.month; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Eventos'), + actions: const [], + ), + body: Container( + child: TableCalendar( + firstDay: DateTime.fromMicrosecondsSinceEpoch(0), + lastDay: DateTime.utc(9000, 12, 31), + focusedDay: _focusedDay, + selectedDayPredicate: (day) { + return isSameDay(_selectedDay, day); + }, + onDaySelected: (selectedDay, focusedDay) { + setState(() { + _selectedDay = selectedDay; + _focusedDay = focusedDay; + }); + }, + calendarFormat: _calendarFormat, + onFormatChanged: (format) { + setState(() { + _calendarFormat = format; + }); + }, + )), + floatingActionButton: FloatingActionButton.extended( + label: const Text('Nuevo'), + icon: const Icon(Icons.add), + onPressed: () { + Navigator.of(context).pushNamed('/newevent'); + }, + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index ff25aa2..f6a708d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -512,6 +512,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + simple_gesture_detector: + dependency: transitive + description: + name: simple_gesture_detector + sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592" + url: "https://pub.dev" + source: hosted + version: "0.2.0" sky_engine: dependency: transitive description: flutter @@ -597,6 +605,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.1" + table_calendar: + dependency: "direct main" + description: + name: table_calendar + sha256: "526854609e1a3df31a841f4dd307b9be7a6a21c945b88a8867dcb66fe5d84d70" + url: "https://pub.dev" + source: hosted + version: "3.0.0" term_glyph: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 5698e57..5cfe56b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,6 +23,7 @@ dependencies: http: ^0.13.5 firebase_core: ^2.8.0 firebase_auth: ^4.3.0 + table_calendar: <=3.0.9 dev_dependencies: flutter_test: |