@@ -18,16 +18,67 @@ class _EditTaskPageState extends State<EditTaskPage> {
1818 final _formKey = GlobalKey <FormState >();
1919 late String _title;
2020 late DateTime _dueDate;
21+ late TimeOfDay _dueTime;
2122 late Priority _priority;
2223
2324 @override
2425 void initState () {
2526 super .initState ();
2627 _title = widget.task.title;
2728 _dueDate = widget.task.dueDate;
29+ _dueTime = TimeOfDay .fromDateTime (widget.task.dueDate);
2830 _priority = widget.task.priority;
2931 }
3032
33+ Future <void > _selectDate (BuildContext context) async {
34+ final DateTime ? picked = await showDatePicker (
35+ context: context,
36+ initialDate: _dueDate,
37+ firstDate: DateTime (2000 ),
38+ lastDate: DateTime (2101 ),
39+ );
40+ if (picked != null && picked != _dueDate) {
41+ setState (() {
42+ _dueDate = picked;
43+ });
44+ }
45+ }
46+
47+ Future <void > _selectTime (BuildContext context) async {
48+ final TimeOfDay ? picked = await showTimePicker (
49+ context: context,
50+ initialTime: _dueTime,
51+ );
52+ if (picked != null && picked != _dueTime) {
53+ setState (() {
54+ _dueTime = picked;
55+ });
56+ }
57+ }
58+
59+ void _submit () {
60+ if (_formKey.currentState! .validate ()) {
61+ _formKey.currentState! .save ();
62+ final newDueDate = DateTime (
63+ _dueDate.year,
64+ _dueDate.month,
65+ _dueDate.day,
66+ _dueTime.hour,
67+ _dueTime.minute,
68+ );
69+ final updatedTask = Task (
70+ id: widget.task.id,
71+ title: _title,
72+ dueDate: newDueDate,
73+ priority: _priority,
74+ isCompleted: widget.task.isCompleted,
75+ );
76+ Provider .of <TaskProvider >(context, listen: false ).updateTask (updatedTask);
77+
78+ Navigator .of (context).popUntil ((route) => route.isFirst);
79+ }
80+ }
81+
3182 @override
3283 Widget build (BuildContext context) {
3384 return Scaffold (
@@ -38,7 +89,7 @@ class _EditTaskPageState extends State<EditTaskPage> {
3889 padding: const EdgeInsets .all (16.0 ),
3990 child: Form (
4091 key: _formKey,
41- child: Column (
92+ child: ListView (
4293 children: [
4394 TextFormField (
4495 initialValue: _title,
@@ -53,7 +104,7 @@ class _EditTaskPageState extends State<EditTaskPage> {
53104 _title = value! ;
54105 },
55106 ),
56- const SizedBox (height: 16.0 ),
107+ const SizedBox (height: 16 ),
57108 Row (
58109 children: [
59110 Expanded (
@@ -62,24 +113,25 @@ class _EditTaskPageState extends State<EditTaskPage> {
62113 ),
63114 ),
64115 TextButton (
65- onPressed: () async {
66- final pickedDate = await showDatePicker (
67- context: context,
68- initialDate: _dueDate,
69- firstDate: DateTime .now (),
70- lastDate: DateTime (2101 ),
71- );
72- if (pickedDate != null ) {
73- setState (() {
74- _dueDate = pickedDate;
75- });
76- }
77- },
116+ onPressed: () => _selectDate (context),
78117 child: const Text ('Select Date' ),
79118 ),
80119 ],
81120 ),
82- const SizedBox (height: 16.0 ),
121+ Row (
122+ children: [
123+ Expanded (
124+ child: Text (
125+ 'Due Time: ${_dueTime .format (context )}' ,
126+ ),
127+ ),
128+ TextButton (
129+ onPressed: () => _selectTime (context),
130+ child: const Text ('Select Time' ),
131+ ),
132+ ],
133+ ),
134+ const SizedBox (height: 16 ),
83135 DropdownButtonFormField <Priority >(
84136 initialValue: _priority,
85137 decoration: const InputDecoration (labelText: 'Priority' ),
@@ -90,31 +142,15 @@ class _EditTaskPageState extends State<EditTaskPage> {
90142 );
91143 }).toList (),
92144 onChanged: (value) {
93- if (value != null ) {
94- setState (() {
95- _priority = value;
96- });
97- }
145+ setState (() {
146+ _priority = value! ;
147+ });
98148 },
99149 ),
100- const SizedBox (height: 32.0 ),
150+ const SizedBox (height: 32 ),
101151 ElevatedButton (
102- onPressed: () {
103- if (_formKey.currentState! .validate ()) {
104- _formKey.currentState! .save ();
105- final updatedTask = Task (
106- id: widget.task.id,
107- title: _title,
108- dueDate: _dueDate,
109- priority: _priority,
110- isCompleted: widget.task.isCompleted,
111- );
112- Provider .of <TaskProvider >(context, listen: false )
113- .updateTask (updatedTask);
114- Navigator .of (context).pop ();
115- }
116- },
117- child: const Text ('Save Task' ),
152+ onPressed: _submit,
153+ child: const Text ('Update Task' ),
118154 ),
119155 ],
120156 ),
0 commit comments