remember<T extends Object> method
T
remember<T extends Object>({})
以当前context、类型T
和key
为索引 记住该对象,并且以后将再次返回该对象
Implementation
T remember<T extends Object>({
T Function()? factory,
T Function(Lifecycle)? factory2,
FutureOr<void> Function(T)? onDispose,
Object? key,
}) {
if (factory == null && factory2 == null) {
throw 'factory and factory2 cannot be null at the same time';
}
final lifecycle = Lifecycle.of(this);
final managers = lifecycle.extData.getOrPut<
Map<BuildContext, _RememberDisposeObserver>>(
key: _keyRemember,
ifAbsent: (l) {
final result =
WeakHashMap<BuildContext, _RememberDisposeObserver>.identity();
/// 不持有 Map,防止内存泄漏
lifecycle.addLifecycleObserver(MapAutoClearObserver(result));
return result;
});
final manager = managers.putIfAbsent(
this, () => _RememberDisposeObserver._(this, lifecycle));
return manager.getOrCreate<T>(factory, factory2, onDispose, key);
}