added navigation to detail page

This commit is contained in:
SomnusVeritas
2023-11-08 14:17:57 +01:00
parent 7fdc03e79f
commit 36aa01fdde
4 changed files with 45 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'pages/todo_create_page.dart'; import 'pages/todo_create_page.dart';
import 'pages/dashboard_page.dart'; import 'pages/dashboard_page.dart';
import 'pages/todo_detail_page.dart';
import 'services/dbhelper.dart'; import 'services/dbhelper.dart';
void main() async { void main() async {
@@ -25,6 +26,7 @@ class MyApp extends StatelessWidget {
routes: { routes: {
DashboardPage.routeName: (context) => const DashboardPage(), DashboardPage.routeName: (context) => const DashboardPage(),
CreateTodoPage.routeName: (context) => const CreateTodoPage(), CreateTodoPage.routeName: (context) => const CreateTodoPage(),
TodoDetailPage.routeName: (context) => const TodoDetailPage(),
}, },
); );
} }

View File

@@ -1,11 +1,39 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../models/todo.dart';
import '../services/todo_provider.dart';
class TodoDetailPage extends StatelessWidget { class TodoDetailPage extends StatelessWidget {
const TodoDetailPage({super.key}); const TodoDetailPage({super.key});
static const routeName = '/detail'; static const routeName = '/detail';
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const Placeholder(); final Todo? todo = TodoProvider.selectedTodo;
if (todo == null) {
Navigator.of(context).pop();
}
final screenWidth = MediaQuery.of(context).size.width;
todo as Todo;
return Scaffold(
appBar: AppBar(),
body: Padding(
padding: EdgeInsets.symmetric(horizontal: screenWidth * 0.05),
child: Column(
children: [
Text(
todo.title,
style: Theme.of(context).textTheme.titleLarge,
),
Text(
todo.description,
),
],
),
),
);
} }
} }

View File

@@ -0,0 +1,5 @@
import '../models/todo.dart';
class TodoProvider {
static Todo? selectedTodo;
}

View File

@@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../models/todo.dart'; import '../models/todo.dart';
import '../pages/todo_detail_page.dart';
import '../services/todo_provider.dart';
class TodoListTile extends StatelessWidget { class TodoListTile extends StatelessWidget {
const TodoListTile({super.key, required this.todo, required this.onPressed}); const TodoListTile({super.key, required this.todo, required this.onPressed});
@@ -20,6 +22,7 @@ class TodoListTile extends StatelessWidget {
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
tileColor: Theme.of(context).colorScheme.primaryContainer, tileColor: Theme.of(context).colorScheme.primaryContainer,
title: Text(todo.title), title: Text(todo.title),
onTap: () => _onListTileTapped(context),
trailing: IconButton( trailing: IconButton(
onPressed: onPressed, onPressed: onPressed,
icon: Icon( icon: Icon(
@@ -35,6 +38,7 @@ class TodoListTile extends StatelessWidget {
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
tileColor: Theme.of(context).colorScheme.surfaceVariant, tileColor: Theme.of(context).colorScheme.surfaceVariant,
title: Text(todo.title), title: Text(todo.title),
onTap: () => _onListTileTapped(context),
trailing: IconButton( trailing: IconButton(
onPressed: onPressed, onPressed: onPressed,
icon: Icon( icon: Icon(
@@ -44,4 +48,9 @@ class TodoListTile extends StatelessWidget {
), ),
); );
} }
void _onListTileTapped(BuildContext context) {
TodoProvider.selectedTodo = todo;
Navigator.of(context).pushNamed(TodoDetailPage.routeName);
}
} }