diff --git a/lib/main.dart b/lib/main.dart index 7dcef33..939ce0e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; -import 'model/pages/task_overview_page.dart'; +import 'pages/task_create_page.dart'; +import 'pages/task_edit_page.dart'; +import 'pages/task_overview_page.dart'; void main() { runApp(const MainApp()); @@ -12,7 +14,11 @@ class MainApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( - routes: {TaskOverviewPage.routeName: (context) => TaskOverviewPage()}, + routes: { + TaskCreatePage.routeName: (context) => TaskCreatePage(), + TaskOverviewPage.routeName: (context) => TaskOverviewPage(), + TaskEditPage.routeName: (context) => TaskEditPage(), + }, initialRoute: TaskOverviewPage.routeName, ); } diff --git a/lib/pages/task_create_page.dart b/lib/pages/task_create_page.dart new file mode 100644 index 0000000..e0fa3b3 --- /dev/null +++ b/lib/pages/task_create_page.dart @@ -0,0 +1,11 @@ +import 'package:flutter/material.dart'; + +class TaskCreatePage extends StatelessWidget { + static const routeName = '/create'; + const TaskCreatePage({super.key}); + + @override + Widget build(BuildContext context) { + return const Placeholder(); + } +} diff --git a/lib/pages/task_edit_page.dart b/lib/pages/task_edit_page.dart new file mode 100644 index 0000000..5fde2bb --- /dev/null +++ b/lib/pages/task_edit_page.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; + +import '../model/task.dart'; + +class TaskEditPage extends StatelessWidget { + static const routeName = '/edit'; + const TaskEditPage({super.key}); + + @override + Widget build(BuildContext context) { + final task = ModalRoute.of(context)!.settings.arguments as Task; + + return Scaffold( + appBar: AppBar(title: Text(task.title)), + body: Form(child: Column()), + ); + } +} diff --git a/lib/model/pages/task_overview_page.dart b/lib/pages/task_overview_page.dart similarity index 62% rename from lib/model/pages/task_overview_page.dart rename to lib/pages/task_overview_page.dart index 0211c5d..9b42d77 100644 --- a/lib/model/pages/task_overview_page.dart +++ b/lib/pages/task_overview_page.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; -import '../../example_data.dart'; -import '../task.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 = '/'; @@ -23,6 +25,10 @@ class _TaskOverviewPageState extends State { onReorderItem: (oldIndex, newIndex) => reorderList(tasks, oldIndex, newIndex), ), + floatingActionButton: FloatingActionButton( + onPressed: onCreateTaskTapped, + child: Icon(Icons.add), + ), ); } @@ -33,9 +39,17 @@ class _TaskOverviewPageState extends State { 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); @@ -48,4 +62,15 @@ class _TaskOverviewPageState extends State { 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); + } + } }