Aqui está o código que desenvolvi seguindo as orientações do exercício. Acredito que cobri todos os pontos, mas se tiverem sugestões de melhoria, ficarei feliz em ouvir!
Class Task:
class Task {
String id;
String title;
String description;
bool isCompleted;
Task({
required this.id,
required this.title,
required this.description,
required this.isCompleted,
});
factory Task.fromMap(Map<String, dynamic> map) {
return Task(
id: map['id'],
title: map['title'],
description: map['description'],
isCompleted: map['isCompleted'],
);
}
Map<String, dynamic> toMap() {
return <String, dynamic>{
'id': id,
'title': title,
'description': description,
'isCompleted': isCompleted,
};
}
}
Class TaskManager:
import 'dart:async';
import 'package:dart_assincronismo/models/task.dart';
StreamController<String> streamController = StreamController<String>();
class TaskManager {
final List<Task> listAllTasks = [];
addTask(Task task) {
listAllTasks.add(task);
}
toggleTaskStatus(String id) {
int index = listAllTasks.indexWhere((task) => task.id == id);
Task task = listAllTasks[index];
task.isCompleted = !task.isCompleted;
String status = task.isCompleted ? "completa" : "não completa";
listAllTasks[index] = task;
streamController.add("\nA tarefa: ${task.title} foi marcada como $status.");
}
List<Task> getAll() {
return listAllTasks;
}
Task taskById(String id) {
return listAllTasks.firstWhere((task) => task.id == id);
}
delete(String id) {
listAllTasks.removeWhere((task) => task.id == id);
}
}
Código main:
import 'dart:async';
import 'package:dart_assincronismo/models/task.dart';
import 'package:dart_assincronismo/class/TaskManager.dart';
void main() {
StreamSubscription streamSubscription =
streamController.stream.listen((String info) {
print(info);
});
Map<String, dynamic> mapTarefa1 = {
"id": "1",
"title": "Dar comida para os cachorros",
"description": "pro baleia",
"isCompleted": false
};
Map<String, dynamic> mapTarefa2 = {
"id": "2",
"title": "Molhar plantas",
"description": "Quando não chover",
"isCompleted": true,
};
Map<String, dynamic> mapTarefa3 = {
"id": "3",
"title": "Estudar",
"description": "Física, Íngles e Matemática",
"isCompleted": false,
};
Task objectTarefa1 = Task.fromMap(mapTarefa1);
Task objectTarefa2 = Task.fromMap(mapTarefa2);
Task objectTarefa3 = Task.fromMap(mapTarefa3);
TaskManager gerenciador = TaskManager();
gerenciador.addTask(objectTarefa1);
gerenciador.addTask(objectTarefa2);
gerenciador.addTask(objectTarefa3);
List<Task> listTasks = gerenciador.getAll();
print("\nMostrar todas tarefas");
for (Task task in listTasks) {
print(
"id: ${task.id} | título: ${task.title} | descrição: ${task.description} | Está completa? ${task.isCompleted}");
}
gerenciador.toggleTaskStatus("1");
print("\nMostrar somente a tarefa 1:");
print(
"id: ${objectTarefa1.id} | título: ${objectTarefa1.title} | descrição: ${objectTarefa1.description} | Está completa? ${objectTarefa1.isCompleted}");
gerenciador.delete("2");
print("\nMostrar todas tarefas novamente:");
for (Task task in listTasks) {
print(
"id: ${task.id} | título: ${task.title} | descrição: ${task.description} | Está completa? ${task.isCompleted}");
}
}