listenByKey method

void Function() listenByKey(
  1. dynamic key,
  2. void onData(
    1. dynamic
    )
)

Listens to a specific key in a Map or index in a List.

Only triggers when the targeted field changes.

Implementation

void Function() listenByKey(dynamic key, void Function(dynamic value) onData) {
  void wrapper(dynamic value) => onData(value);

  addFieldListener(key, wrapper);

  // Initial value
  dynamic fieldValue;

  if (_value is Map) {
    fieldValue = (_value as Map)[key];
  } else if (_value is List && key is int) {
    final list = _value as List;
    if (key >= 0 && key < list.length) {
      fieldValue = list[key];
    }
  }

  onData(fieldValue);

  bool cancelled = false;
  return () {
    if (!cancelled) {
      removeFieldListener(key, wrapper);
      cancelled = true;
    }
  };
}