summaryrefslogtreecommitdiff
path: root/lib/screens/new_event_screen.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/screens/new_event_screen.dart')
-rw-r--r--lib/screens/new_event_screen.dart144
1 files changed, 144 insertions, 0 deletions
diff --git a/lib/screens/new_event_screen.dart b/lib/screens/new_event_screen.dart
new file mode 100644
index 0000000..3c49ee6
--- /dev/null
+++ b/lib/screens/new_event_screen.dart
@@ -0,0 +1,144 @@
+import 'package:flutter/material.dart';
+import 'package:pmsna1/providers/events_provider.dart';
+import 'package:provider/provider.dart';
+
+import '../database/helper.dart';
+import '../models/event.dart';
+
+class NewEventScreen extends StatefulWidget {
+ const NewEventScreen({super.key});
+
+ @override
+ State<NewEventScreen> createState() => _NewEventScreenState();
+}
+
+class _NewEventScreenState extends State<NewEventScreen> {
+ Event? event;
+ DateTime? selectedDate;
+ DatabaseHelper helper = DatabaseHelper();
+
+ final _descController = TextEditingController();
+ final _formKey = GlobalKey<FormState>();
+
+ final padding = 12.0;
+ Widget get spacer => SizedBox(height: padding, width: padding);
+
+ @override
+ Widget build(BuildContext context) {
+ event = ModalRoute.of(context)?.settings.arguments as Event?;
+ if (event != null) {
+ _descController.text = event!.description;
+ setState(() {
+ selectedDate = event!.date;
+ });
+ }
+
+ EventsProvider provider = Provider.of<EventsProvider>(context);
+
+ return Scaffold(
+ appBar: AppBar(
+ title: Text(event == null ? 'Nuevo evento' : 'Editar evento'),
+ actions: [
+ IconButton(
+ icon: const Icon(Icons.save),
+ tooltip: event == null ? 'Crear' : 'Editar',
+ onPressed: () {
+ if (_formKey.currentState?.validate() == false) {
+ return;
+ }
+ if (selectedDate == null) {
+ return;
+ }
+
+ if (event == null) {
+ helper.insert('events', {
+ 'description': _descController.text,
+ 'date': selectedDate!.toIso8601String(),
+ 'completed': false, // TODO: implement checkbox
+ }).then((value) {
+ SnackBar bar = SnackBar(
+ content: Text(
+ value > 0 ? 'Evento insertado' : 'Ocurrió un error',
+ ),
+ );
+
+ ScaffoldMessenger.of(context).showSnackBar(bar);
+ Navigator.of(context).pop();
+ provider.fetchDB();
+ });
+ } else {
+ helper
+ .update(
+ 'events',
+ {
+ 'description': _descController.text,
+ 'date': selectedDate!.toIso8601String(),
+ 'completed': false,
+ },
+ 'id',
+ event!.id,
+ )
+ .then((value) {
+ SnackBar bar = SnackBar(
+ content: Text(
+ value > 0 ? 'Evento modificado' : 'Ocurrió un error',
+ ),
+ );
+
+ ScaffoldMessenger.of(context).showSnackBar(bar);
+ Navigator.of(context).pop();
+ provider.fetchDB();
+ });
+ }
+ },
+ )
+ ],
+ ),
+ body: Padding(
+ padding: const EdgeInsets.all(12.0),
+ child: Form(
+ key: _formKey,
+ child: Column(
+ children: [
+ TextFormField(
+ controller: _descController,
+ textAlignVertical: TextAlignVertical.top,
+ decoration: const InputDecoration(
+ border: OutlineInputBorder(),
+ labelText: 'Descripción',
+ ),
+ validator: (value) {
+ if (value != null && value.isNotEmpty) {
+ return null;
+ }
+ return 'Este campo no debe estar vacío';
+ },
+ ),
+ spacer,
+ OutlinedButton(
+ child: Text(selectedDate != null
+ ? selectedDate!.toIso8601String()
+ : 'Seleccionar fecha'),
+ onPressed: () {
+ showDatePicker(
+ initialDate: DateTime.now(),
+ firstDate: DateTime.now(),
+ lastDate: DateTime.utc(9000, 12, 31),
+ currentDate: DateTime.now(),
+ initialEntryMode: DatePickerEntryMode.calendar,
+ context: context,
+ ).then((DateTime? date) {
+ if (date == null) return;
+ setState(() {
+ selectedDate = date;
+ });
+ });
+ },
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}