implemented undo button and proper sorting
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
import 'package:isar/isar.dart';
|
||||
|
||||
import '../services/dbhelper.dart';
|
||||
|
||||
part 'todo.g.dart';
|
||||
|
||||
@collection
|
||||
@@ -13,11 +11,10 @@ class Todo {
|
||||
bool done;
|
||||
|
||||
Todo({
|
||||
int? index,
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.createdAt,
|
||||
this.description = '',
|
||||
DateTime? createdTime,
|
||||
this.done = false,
|
||||
}) : createdAt = createdTime ?? DateTime.now(),
|
||||
id = index ?? DbHelper.nextTodoId;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -56,7 +56,12 @@ class _CreateTodoPageState extends State<CreateTodoPage> {
|
||||
}
|
||||
|
||||
void _onSubmitted() {
|
||||
DbHelper.addOrUpdateTodo(Todo(title: _title, description: _description));
|
||||
DbHelper.addOrUpdateTodo(Todo(
|
||||
id: DbHelper.nextTodoId,
|
||||
title: _title,
|
||||
description: _description,
|
||||
createdAt: DateTime.now(),
|
||||
));
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ class DbHelper {
|
||||
}
|
||||
|
||||
static List<Todo> fetchTodos() =>
|
||||
_isar.todos.where().doneEqualTo(false).findAll();
|
||||
_isar.todos.where().doneEqualTo(false).sortByCreatedAtDesc().findAll();
|
||||
|
||||
static void addOrUpdateTodo(Todo todo) =>
|
||||
_isar.write((isar) => isar.todos.put(todo));
|
||||
|
||||
@@ -39,7 +39,11 @@ class _TodoListState extends State<TodoList> {
|
||||
tileColor: Theme.of(context).colorScheme.primaryContainer,
|
||||
title: Text(todo.title),
|
||||
trailing: IconButton(
|
||||
onPressed: () {},
|
||||
onPressed: () {
|
||||
todo.done = true;
|
||||
DbHelper.addOrUpdateTodo(todo);
|
||||
_showSnackbar(todo);
|
||||
},
|
||||
icon: Icon(
|
||||
Icons.check_box,
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
@@ -47,4 +51,18 @@ class _TodoListState extends State<TodoList> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _showSnackbar(Todo todo) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: const Text('Todo done'),
|
||||
action: SnackBarAction(
|
||||
label: 'Undo',
|
||||
onPressed: () {
|
||||
todo.done = false;
|
||||
DbHelper.addOrUpdateTodo(todo);
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user