Add local persistence for deleted tasks

- Extended TaskService to manage a list of deleted tasks using shared_preferences.
- Modified TaskViewModel to filter out tasks that have been marked as deleted locally.
- Loaded the list of deleted tasks during app initialization in main.dart.
This commit is contained in:
hunteraraujo
2023-09-03 20:35:39 -07:00
parent f3f7fdf381
commit bc211827ad
3 changed files with 28 additions and 6 deletions

View File

@@ -42,6 +42,7 @@ class MyApp extends StatelessWidget {
// Fetch services from providers
final chatService = Provider.of<ChatService>(context, listen: false);
final taskService = Provider.of<TaskService>(context, listen: false);
taskService.loadDeletedTasks();
return MaterialApp(
title: 'AutoGPT Flutter Client',

View File

@@ -1,10 +1,12 @@
import 'package:auto_gpt_flutter_client/models/task_request_body.dart';
import 'package:auto_gpt_flutter_client/models/task_response.dart';
import 'package:auto_gpt_flutter_client/utils/rest_api_utility.dart';
import 'package:shared_preferences/shared_preferences.dart';
/// Service class for performing task-related operations.
class TaskService {
final RestApiUtility api;
List<String> _deletedTaskIds = [];
TaskService(this.api);
@@ -59,4 +61,21 @@ class TaskService {
throw Exception('Failed to list task artifacts: $e');
}
}
Future<void> loadDeletedTasks() async {
_deletedTaskIds =
(await SharedPreferences.getInstance()).getStringList('deletedTasks') ??
[];
print("Deleted tasks fetched successfully!");
}
void saveDeletedTask(String taskId) {
_deletedTaskIds.add(taskId);
SharedPreferences.getInstance()
.then((prefs) => prefs.setStringList('deletedTasks', _deletedTaskIds));
}
bool isTaskDeleted(String taskId) {
return _deletedTaskIds.contains(taskId);
}
}

View File

@@ -35,19 +35,21 @@ class TaskViewModel with ChangeNotifier {
}
/// Deletes a task.
void deleteTask(String id) async {
// TODO: Protocol doesn't support deleting tasks, we need to manually manage this list
// Update local tasks list and notify listeners
_tasks.removeWhere((task) => task.id == id);
void deleteTask(String taskId) {
_taskService.saveDeletedTask(taskId);
tasks.removeWhere((task) => task.id == taskId);
notifyListeners();
print("Tasks deleted successfully!");
}
/// Fetches tasks from the data source.
void fetchTasks() async {
try {
final TaskResponse tasksResponse = await _taskService.listAllTasks();
_tasks = tasksResponse.tasks;
final tasksFromApi = tasksResponse.tasks;
_tasks = tasksFromApi
.where((task) => !_taskService.isTaskDeleted(task.id))
.toList();
notifyListeners();
print("Tasks fetched successfully!");