Exercício 4: Ouvindo as atualizações da stream
Arquivo: lib/task_manager.dart - trecho do código utilizado
class TaskManager {
// ... atributos e stream do exercicio 2 ...
// Adiciona uma nova tarefa
void addTask(Task task) {
_listTasks.add(task);
_streamController.add("Tarefa '${task.title}' foi adicionada!");
}
// Alterna o status de conclusao de uma tarefa
void toggleTaskStatus(String id) {
int index = _listTasks.indexWhere((task) => task.id == id);
if (index != -1) {
_listTasks[index].isCompleted = !_listTasks[index].isCompleted;
String status = _listTasks[index].isCompleted ? 'COMPLETA' : 'INCOMPLETA';
_streamController.add("Tarefa '${_listTasks[index].title}' foi marcada como $status!");
}
}
// Retorna todas as tarefas
List<Task> getAll() {
return _listTasks;
}
// Busca uma tarefa por ID
Task getById(String id) {
return _listTasks.firstWhere((task) => task.id == id);
}
// Remove uma tarefa por ID
void delete(String id) {
Task task = getById(id);
_listTasks.removeWhere((task) => task.id == id);
_streamController.add("Tarefa '${task.title}' foi REMOVIDA!");
}
// Fecha o StreamController
void dispose() {
_streamController.close();
}
}
Exercício 5: Testando comportamento de notificações
Arquivo bin/main.dart
import 'package:listacompras/task.dart';
import 'package:listacompras/task_manager.dart';
void main() async {
print('=== GERENCIADOR DE LISTA DE COMPRAS ===\n');
final taskManager = TaskManager();
// Criar o ouvinte para as notificacoes
final subscription = taskManager.notificationStream.listen((mensagem) {
print('[NOTIFICACAO] $mensagem');
});
// Pequeno delay para garantir que o listener esta pronto
await Future.delayed(Duration(milliseconds: 10));
// Adicionar tres tarefas
taskManager.addTask(Task(
id: '1',
title: 'Comprar Leite',
description: 'Comprar 2 litros de leite integral.',
));
await Future.delayed(Duration(milliseconds: 50));
taskManager.addTask(Task(
id: '2',
title: 'Comprar Pão',
description: 'Comprar pão francês.',
));
await Future.delayed(Duration(milliseconds: 50));
taskManager.addTask(Task(
id: '3',
title: 'Comprar ovos',
description: 'Comprar 1 dúzia de ovos.',
));
await Future.delayed(Duration(milliseconds: 50));
// Visualizar todas as tarefas
print('\n--- TODAS AS TAREFAS ---');
for (var task in taskManager.getAll()) {
print(task);
}
// Completar a primeira tarefa
print('\n');
taskManager.toggleTaskStatus('1');
await Future.delayed(Duration(milliseconds: 50));
// Visualizar a primeira tarefa
print('\n--- TAREFA ESPECIFICA ---');
Task task1 = taskManager.getById('1');
print('$task1 - ${task1.description}');
// Deletar a segunda tarefa
print('\n');
taskManager.delete('2');
await Future.delayed(Duration(milliseconds: 50));
// Visualizar todas novamente
print('\n--- TODAS AS TAREFAS (ATUALIZADO) ---');
for (var task in taskManager.getAll()) {
print(task);
}
// Aguardar processamento final
await Future.delayed(Duration(milliseconds: 100));
// Limpar recursos
await subscription.cancel();
taskManager.dispose();
print('\n=== FIM ===');
}