obtain<T> static method

ValueNotifier<T> obtain<T>(
  1. dynamic target, {
  2. void listener(
    1. T value
    )?,
  3. T? defaultValue,
})

获取或创建 ValueNotifier

Implementation

static ValueNotifier<T> obtain<T>(
    dynamic target, {
      void Function(T value)? listener,
      T? defaultValue,
    }) {
  if (!_notifiers.containsKey(target)) {
    final notifier = ValueNotifier<T?>(defaultValue);
    _notifiers[target] = notifier;
    _listeners[target] = <void Function(dynamic)>{};

    notifier.addListener(() {
      final value = notifier.value;
      for (var l in _listeners[target]!.toList()) {
        l(value);
      }
    });
  }

  if (listener != null) {
    _listeners[target]!.add((value) => listener(value as T));
  }

  return _notifiers[target]! as ValueNotifier<T>;
}