unpack function

dynamic unpack([
  1. dynamic passedValue,
  2. String? key,
  3. TTNode? node
])

Implementation

dynamic unpack([dynamic passedValue, String? key, TTNode? node]) {
  var value = passedValue;

  if (value == null) {
    return;
  }

  if (value.runtimeType == {}.runtimeType && value.containsKey(':')) {
    final val = value[':'];
    if (val != null) {
      return val;
    }
  }

  if (value.runtimeType == {}.runtimeType && value.containsKey('m')) {
    final val = value['m'];
    if (val != null) {
      value = int.parse(val);
    }
  }

  if (key == null || value == null) {
    return;
  }

  if (value == node![key]) {
    return value;
  }
  if (!check(node[key])) {
    return value;
  }
  final soul = node.nodeMetaData?.key;
  final state = node.nodeMetaData != null
      ? node.nodeMetaData!.forward != null
          ? node.nodeMetaData!.forward![key]
          : null
      : null;

  if (value is List &&
      value.length == 4 &&
      value[0] == soul &&
      value[1] == key &&
      state?.floor() == value[3].floor()) {
    return value[2];
  }

  if (state! < shuffleAttackCutoff) {
    return value;
  }
}