get method

dynamic get(
  1. String path
)

Implementation

dynamic get(String path) {
  RegExp exp = RegExp(r"^(\w+)((\[[^$]+\])*)$");
  List<String> arr = path.split(".");
  List segs = [];
  for (String seg in arr) {
    RegExpMatch? match = exp.firstMatch(seg);
    if (match == null) return null;
    String name = match.group(1)!;
    String property = match.group(2)!;
    segs.add(name);
    if (property.length > 0) {
      for (var seg in segIterable(property)) {
        if (seg.indexOf("[") > 0) {
          segs.add(get(seg));
        } else {
          var val;
          try {
            val = jsonDecode(seg);
          } catch (e) {
            val = get(seg);
          }
          segs.add(val);
        }
      }
    }
  }

  dynamic ret = _getPath(data, segs, 0);
  if (ret == null) {
    var parent = _parent;
    while (parent != null) {
      ret = _getPath(parent.data, segs, 0);
      if (ret != null) break;
      parent = parent._parent;
    }
  }
  return ret;
}