withLifecycleExtData<T extends Object> method

T withLifecycleExtData<T extends Object>({
  1. T factory()?,
  2. T factory2(
    1. Lifecycle lifecycle
    )?,
  3. Object? key,
})

从当前context生成一个绑定到liveDate内部的缓存数据

Implementation

T withLifecycleExtData<T extends Object>({
  T Function()? factory,
  T Function(Lifecycle lifecycle)? factory2,
  Object? key,
}) {
  final lifecycle = Lifecycle.of(this);
  factory ??= () => factory2!(lifecycle);

  final Map<BuildContext, Map<Object, Object?>> contextExtData =
      lifecycle.extData.putIfAbsent(
          key: _withLifecycleAndExtDataKey, ifAbsent: WeakHashMap.new);

  final data = contextExtData.putIfAbsent(this, () {
    final result = HashMap<Object, Object?>();

    /// 不持有 Map,防止内存泄漏
    lifecycle.addLifecycleObserver(MapAutoClearObserver(result));
    return result;
  });

  return data.putIfAbsent(key == null ? T : TypedKey<T>(key), factory) as T;
}