import 'package:flutter/material.dart'; import '../model/callback_models/create_task_request.dart'; import '../model/extensions/controller_context.dart'; import '../model/task.dart'; import '../service/task_controller.dart'; import '../service/tools.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 { List get tasks => context.controller().orderedTasks; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: ReorderableListView.builder( itemBuilder: itemBuilder, itemCount: tasks.length, onReorderItem: context.controller().reorderTask, ), 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: () async { final result = await onTaskTapped(task); if (result != null && context.mounted) { context.controller().saveTask( result.toTask(id: task.id), ); } }, ); } Future onTaskTapped(Task task) async { final result = await Navigator.of( context, ).pushNamed(TaskEditPage.routeName, arguments: task); return result as CreateTaskRequest?; } void onCreateTaskTapped() async { final result = await Navigator.of(context).pushNamed(TaskEditPage.routeName) as CreateTaskRequest?; if (result != null && context.mounted) { context.controller().saveTask( result.toTask(id: generateId()), ); } } }