1
resposta

[Projeto] Atividade: Gerenciador de tarefas

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}");
  }
}
1 resposta

Olá, Gabriel. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente. Parabéns pelo trabalho. Continue com essa dedicação.

Ótimo como você organizou a lógica do TaskManager e usou o StreamController para notificar mudanças de estado nas tarefas._** Isso torna o código mais dinâmico e prepara bem para usos mais avançados com interfaces reativas.

Um detalhe interessante é que você pode usar where para filtrar tarefas concluídas ou pendentes de forma prática. Veja este exemplo:


List completas = listAllTasks.where((t) => t.isCompleted).toList();

Esse código retorna apenas as tarefas marcadas como concluídas.

  Alura   Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!