diff options
Diffstat (limited to 'lib/screens/new_event_screen.dart')
-rw-r--r-- | lib/screens/new_event_screen.dart | 144 |
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; + }); + }); + }, + ), + ], + ), + ), + ), + ); + } +} |