import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'task_provider.dart'; import 'task_model.dart'; import 'package:intl/intl.dart'; class AddTaskDialog extends StatefulWidget { @override _AddTaskDialogState createState() => _AddTaskDialogState(); } class _AddTaskDialogState extends State { final _formKey = GlobalKey(); String _title = ''; String? _description; String? _category; DateTime? _selectedDeadline; TaskPriority _selectedPriority = TaskPriority.medium; @override Widget build(BuildContext context) { return AlertDialog( title: Text('Add New Task'), content: Form( key: _formKey, child: Column( mainAxisSize: MainAxisSize.min, children: [ TextFormField( decoration: InputDecoration(labelText: 'Task Title*'), validator: (value) { if (value == null || value.isEmpty) { return 'Please enter a task title'; } return null; }, onSaved: (value) { _title = value ?? ''; }, ), TextFormField( decoration: InputDecoration(labelText: 'Description (optional)'), onSaved: (value) { _description = value; }, ), TextFormField( decoration: InputDecoration(labelText: 'Category (optional)'), onSaved: (value) { _category = value; }, ), SizedBox(height: 20), Text('Deadline: ${_selectedDeadline != null ? DateFormat('yMMMd').format(_selectedDeadline!) : 'No deadline'}'), ElevatedButton( child: Text('Select Deadline'), onPressed: () => _selectDeadline(context), ), DropdownButton( value: _selectedPriority, onChanged: (TaskPriority? newValue) { setState(() { _selectedPriority = newValue!; }); }, items: TaskPriority.values.map((TaskPriority priority) { return DropdownMenuItem( value: priority, child: Text(priority.toString().split('.').last), ); }).toList(), ), ], ), ), actions: [ TextButton( child: Text('Cancel'), onPressed: () { Navigator.of(context).pop(); }, ), ElevatedButton( child: Text('Add Task'), onPressed: () { if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); Provider.of(context, listen: false).addTask( title: _title, description: _description, category: _category, deadline: _selectedDeadline, priority: _selectedPriority, ); Navigator.of(context).pop(); } }, ), ], ); } Future _selectDeadline(BuildContext context) async { final DateTime? picked = await showDatePicker( context: context, initialDate: DateTime.now(), firstDate: DateTime.now(), lastDate: DateTime(2100), ); if (picked != null) { setState(() { _selectedDeadline = picked; }); } } }