summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2023-03-27 00:00:49 -0600
committerIván Ávalos <avalos@disroot.org>2023-03-27 00:00:49 -0600
commit67bd958602705d834a031f4dfadb9dbe6633d54e (patch)
tree41938ee2ca45c12d87b9f2266fddd2043563d23f
parent4b7d33896879baba1435281f814766a80fbeecb2 (diff)
downloadpmsna1-67bd958602705d834a031f4dfadb9dbe6633d54e.tar.gz
pmsna1-67bd958602705d834a031f4dfadb9dbe6633d54e.tar.bz2
pmsna1-67bd958602705d834a031f4dfadb9dbe6633d54e.zip
Paving the way for events
-rw-r--r--lib/database/helper.dart28
-rw-r--r--lib/models/event.dart22
-rw-r--r--lib/routes.dart2
-rw-r--r--lib/screens/dashboard_screen.dart7
-rw-r--r--lib/screens/events_screen.dart53
-rw-r--r--pubspec.lock16
-rw-r--r--pubspec.yaml1
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: