import 'dart:collection'; import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'mailbox_node.dart'; class MailboxTree with EquatableMixin { MailboxNode root; MailboxTree(this.root); MailboxNode? findNode(MailboxId? mailboxId) { var result; final queue = ListQueue(); queue.addLast(root); while (queue.isNotEmpty && mailboxId != null) { final currentNode = queue.removeFirst(); if (mailboxId == currentNode.item.id) { result = currentNode; break; } currentNode.childrenItems?.forEach((child) { queue.addLast(child); }); } return result; } List getAllNodes(MailboxNode node){ List listOfNodes = []; _addAllNodes(node, listOfNodes); return listOfNodes; } void _addAllNodes(MailboxNode? node, List listOfNodes) { if (node != null) { listOfNodes.add(node); List? childrenItems = node.childrenItems; if (childrenItems != null) { childrenItems.forEach((child) { _addAllNodes(child, listOfNodes); }); } } } @override List get props => [root]; }