Files
GetStuffDone/lib/widgets/todo_listtile.dart
2023-11-15 14:42:03 +01:00

89 lines
2.5 KiB
Dart

import 'package:flutter/material.dart';
import '../models/todo.dart';
import '../pages/todo_detail_page.dart';
import '../services/todo_provider.dart';
class TodoListTile extends StatelessWidget {
const TodoListTile({super.key, required this.todo, required this.onPressed});
final Todo todo;
final VoidCallback onPressed;
@override
Widget build(BuildContext context) {
final tileColor = todo.done
? Theme.of(context).colorScheme.surfaceVariant
: Theme.of(context).colorScheme.primaryContainer;
final icon = todo.done
? Icon(
Icons.delete,
color: Theme.of(context).colorScheme.error,
)
: Icon(
Icons.check_box,
color: Theme.of(context).colorScheme.primary,
);
return ListTile(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
tileColor: tileColor,
contentPadding: const EdgeInsets.only(left: 24, right: 12),
title: Text(
todo.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
onTap: () => _onListTileTapped(context),
trailing: IconButton(
onPressed: onPressed,
icon: icon,
),
);
}
Widget undoneTodo(BuildContext context) {
return ListTile(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
tileColor: Theme.of(context).colorScheme.primaryContainer,
contentPadding: const EdgeInsets.only(left: 24, right: 12),
title: Text(
todo.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
onTap: () => _onListTileTapped(context),
trailing: IconButton(
onPressed: onPressed,
icon: Icon(
Icons.check_box,
color: Theme.of(context).colorScheme.primary,
),
),
);
}
Widget doneTodo(BuildContext context) {
return ListTile(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
tileColor: Theme.of(context).colorScheme.surfaceVariant,
title: Text(
todo.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
onTap: () => _onListTileTapped(context),
trailing: IconButton(
onPressed: onPressed,
icon: Icon(
Icons.delete,
color: Theme.of(context).colorScheme.error,
),
),
);
}
void _onListTileTapped(BuildContext context) {
TodoProvider.selectedTodo = todo;
Navigator.of(context).pushNamed(TodoDetailPage.routeName);
}
}