withLifecycleExtData<T extends Object> method
T
withLifecycleExtData<T extends Object>({
- T factory()?,
- T factory2(
- Lifecycle lifecycle
- Object? key,
从当前context生成一个绑定到liveDate
内部的缓存数据
- context 销毁时自动清理
- 与 withLifecycleAndExtDataEffect 数据相同
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;
}