diff --git a/lib/main.dart b/lib/main.dart index 3d24c7e..0652d1f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,10 +1,22 @@ import 'package:flutter/material.dart'; +import 'model/repositories/local_repository.dart'; import 'pages/task_edit_page.dart'; import 'pages/task_overview_page.dart'; +import 'service/controller_scope.dart'; +import 'service/task_controller.dart'; -void main() { - runApp(const MainApp()); +void main() async { + final repository = LocalRepository(); + WidgetsFlutterBinding.ensureInitialized(); + await repository.initialize(); + + runApp( + ControllerScope( + controller: TaskController(repository), + child: const MainApp(), + ), + ); } class MainApp extends StatelessWidget { diff --git a/lib/pages/task_overview_page.dart b/lib/pages/task_overview_page.dart index 41447ef..4cb59bb 100644 --- a/lib/pages/task_overview_page.dart +++ b/lib/pages/task_overview_page.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; -import '../example_data.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'; @@ -15,7 +16,8 @@ class TaskOverviewPage extends StatefulWidget { } class _TaskOverviewPageState extends State { - //TODO: Replace example data call + List get tasks => context.controller().orderedTasks; + @override Widget build(BuildContext context) { return Scaffold( @@ -23,8 +25,7 @@ class _TaskOverviewPageState extends State { body: ReorderableListView.builder( itemBuilder: itemBuilder, itemCount: tasks.length, - onReorderItem: (oldIndex, newIndex) => - reorderList(tasks, oldIndex, newIndex), + onReorderItem: context.controller().reorderTask, ), floatingActionButton: FloatingActionButton( onPressed: onCreateTaskTapped, @@ -42,10 +43,10 @@ class _TaskOverviewPageState extends State { subtitle: Text(task.description), onTap: () async { final result = await onTaskTapped(task); - if (result != null) { - tasks.remove(task); - tasks.add(result.toTask(id: task.id, position: task.position)); - setState(() {}); + if (result != null && context.mounted) { + context.controller().saveTask( + result.toTask(id: task.id), + ); } }, ); @@ -58,28 +59,15 @@ class _TaskOverviewPageState extends State { return result as CreateTaskRequest?; } - 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(TaskEditPage.routeName) as CreateTaskRequest?; - if (result != null) { - tasks.add(result.toTask(id: generateId(), position: tasks.length)); - setState(() {}); + if (result != null && context.mounted) { + context.controller().saveTask( + result.toTask(id: generateId()), + ); } } }