1+ import 'package:flutter/material.dart' ;
2+ import 'package:provider/provider.dart' ;
3+ import 'package:butter_task/features/task/presentation/providers/task_provider.dart' ;
4+ import 'package:butter_task/features/task/presentation/widgets/task_item_widget.dart' ;
5+ import 'package:butter_task/features/task/domain/entities/task.dart' ;
6+
7+ class TaskSliverList extends StatefulWidget {
8+ const TaskSliverList ({super .key});
9+
10+ @override
11+ State <TaskSliverList > createState () => _TaskSliverListState ();
12+ }
13+
14+ class _TaskSliverListState extends State <TaskSliverList > {
15+ late List <Task > tasks;
16+
17+ @override
18+ void initState () {
19+ super .initState ();
20+ tasks = [];
21+ }
22+
23+ @override
24+ void didChangeDependencies () {
25+ super .didChangeDependencies ();
26+ final taskProvider = Provider .of <TaskProvider >(context);
27+ setState (() {
28+ tasks = taskProvider.selectedTasks;
29+ });
30+ }
31+
32+ void _deleteTask (Task task) {
33+ final taskProvider = Provider .of <TaskProvider >(context, listen: false );
34+ taskProvider.removeTask (task);
35+ }
36+
37+ void _updateTaskOrder (List <Task > updatedTasks) {
38+ final taskProvider = Provider .of <TaskProvider >(context, listen: false );
39+ taskProvider.updateTaskOrder (updatedTasks);
40+ }
41+
42+ @override
43+ Widget build (BuildContext context) {
44+ return tasks.isEmpty
45+ ? Center (
46+ child: Text (
47+ Provider .of <TaskProvider >(context).showDoneTasks
48+ ? 'No tasks already done.'
49+ : 'No tasks yet. Add a task!' ,
50+ style: Theme .of (context).textTheme.titleMedium,
51+ ),
52+ )
53+ : ReorderableListView .builder (
54+ itemCount: tasks.length,
55+ itemBuilder: (BuildContext context, int index) {
56+ return Dismissible (
57+ key: Key (tasks[index].id.toString ()),
58+ direction: DismissDirection .startToEnd,
59+ background: Container (
60+ color: Colors .red,
61+ alignment: Alignment .centerLeft,
62+ padding: const EdgeInsets .symmetric (horizontal: 20 ),
63+ child: const Icon (Icons .delete, color: Colors .white),
64+ ),
65+ onDismissed: (direction) {
66+ _deleteTask (tasks[index]);
67+ },
68+ child: TaskItem (task: tasks[index]),
69+ );
70+ },
71+ onReorder: (int oldIndex, int newIndex) {
72+ setState (() {
73+ if (oldIndex < newIndex) {
74+ newIndex -= 1 ;
75+ }
76+ final Task removedTask = tasks.removeAt (oldIndex);
77+ tasks.insert (newIndex, removedTask);
78+
79+ // Update task order in the provider
80+ _updateTaskOrder (tasks);
81+ });
82+ },
83+ );
84+ }
85+ }
0 commit comments