findNodes method

List<MenuNode> findNodes(
  1. MenuNode node,
  2. Uri uri,
  3. int deep,
  4. String prefix,
  5. List<MenuNode> result,
)

Implementation

List<MenuNode> findNodes(
  MenuNode node,
  Uri uri,
  int deep,
  String prefix,
  List<MenuNode> result,
) {
  List<String> parts = uri.pathSegments;
  if (deep > parts.length - 1) {
    return result;
  }
  String target = parts[deep];
  if (node.children.isNotEmpty) {
    target = prefix + target;
    List<MenuNode> nodes =
        node.children.where((e) => e.path == target).toList();
    bool match = nodes.isNotEmpty;
    if (match) {
      MenuNode matched = nodes.first;
      result.add(matched);
      String nextPrefix = '${matched.path}/';
      findNodes(matched, uri, ++deep, nextPrefix, result);
    }
  }
  return result;
}