organize
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import '../models/todo.dart';
|
||||
import '../db.dart';
|
||||
|
||||
const List<String> categories = ['Personal', 'Work', 'Shopping', 'Health', 'Other'];
|
||||
const List<String> priorityKeys = ['low', 'medium', 'high'];
|
||||
const Map<String, int> priorityColors = {
|
||||
'low': 0xFF4CAF50,
|
||||
'medium': 0xFFFF9800,
|
||||
'high': 0xFFF44336,
|
||||
};
|
||||
|
||||
enum TodoFilter { all, active, completed }
|
||||
|
||||
class TodoState extends ChangeNotifier {
|
||||
List<Todo> _todos = [];
|
||||
TodoFilter _filter = TodoFilter.all;
|
||||
|
||||
List<Todo> get todos => _todos;
|
||||
TodoFilter get filter => _filter;
|
||||
|
||||
List<Todo> get filteredTodos {
|
||||
switch (_filter) {
|
||||
case TodoFilter.active:
|
||||
return _todos.where((t) => !t.completed).toList();
|
||||
case TodoFilter.completed:
|
||||
return _todos.where((t) => t.completed).toList();
|
||||
case TodoFilter.all:
|
||||
return _todos;
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, int> get counts => {
|
||||
'all': _todos.length,
|
||||
'active': _todos.where((t) => !t.completed).length,
|
||||
'completed': _todos.where((t) => t.completed).length,
|
||||
};
|
||||
|
||||
void setTodos(List<Todo> todos) {
|
||||
_todos = todos;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setFilter(TodoFilter f) {
|
||||
_filter = f;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> addTodo(String title, String category, String priority) async {
|
||||
final id = await TodoDatabase.insertTodo(title, category, priority);
|
||||
_todos.insert(0, Todo(
|
||||
id: id,
|
||||
title: title,
|
||||
category: category,
|
||||
priority: priority,
|
||||
createdAt: DateTime.now().millisecondsSinceEpoch ~/ 1000,
|
||||
));
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> toggleTodo(int id) async {
|
||||
final idx = _todos.indexWhere((t) => t.id == id);
|
||||
if (idx == -1) return;
|
||||
final todo = _todos[idx];
|
||||
final newCompleted = !todo.completed;
|
||||
_todos[idx] = todo.copyWith(completed: newCompleted);
|
||||
notifyListeners();
|
||||
await TodoDatabase.toggleTodo(id, newCompleted);
|
||||
}
|
||||
|
||||
Future<void> updateTodo(int id, String title, String category, String priority) async {
|
||||
final idx = _todos.indexWhere((t) => t.id == id);
|
||||
if (idx == -1) return;
|
||||
_todos[idx] = _todos[idx].copyWith(
|
||||
title: title,
|
||||
category: category,
|
||||
priority: priority,
|
||||
);
|
||||
notifyListeners();
|
||||
await TodoDatabase.updateTodo(id, title, category, priority);
|
||||
}
|
||||
|
||||
Future<void> deleteTodo(int id) async {
|
||||
_todos.removeWhere((t) => t.id == id);
|
||||
notifyListeners();
|
||||
await TodoDatabase.deleteTodo(id);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user