import 'package:flutter/material.dart'; import '../example_data.dart'; import '../model/task.dart'; import 'task_create_page.dart'; import 'task_edit_page.dart'; class TaskOverviewPage extends StatefulWidget { static const String routeName = '/'; const TaskOverviewPage({super.key}); @override State createState() => _TaskOverviewPageState(); } class _TaskOverviewPageState extends State { //TODO: Replace example data call @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: ReorderableListView.builder( itemBuilder: itemBuilder, itemCount: tasks.length, onReorderItem: (oldIndex, newIndex) => reorderList(tasks, oldIndex, newIndex), ), floatingActionButton: FloatingActionButton( onPressed: onCreateTaskTapped, child: Icon(Icons.add), ), ); } Widget itemBuilder(BuildContext context, int index) { final task = tasks.elementAt(index); return ListTile( key: Key(task.id), title: Text(task.title), subtitle: Text(task.description), onTap: () => onTaskTapped(task), ); } Future onTaskTapped(Task task) async { final result = await Navigator.of( context, ).pushNamed(TaskEditPage.routeName, arguments: task); return result as Task?; } List reorderList(List tasks, oldIndex, newIndex) { final item = tasks.removeAt(oldIndex); tasks.insert(newIndex, item); final List reordered = []; for (int i = 0; i < tasks.length; i++) { reordered.add(tasks.elementAt(i).copyWith(position: i)); } return reordered; } void onCreateTaskTapped() async { //TODO: example data call final result = await Navigator.of(context).pushNamed(TaskCreatePage.routeName) as Task?; if (result != null) { tasks.add(result); } } }