withLifecycleEffect method
void
withLifecycleEffect({})
从当前的Context中获取Lifecycle并使用
- 多次调用时不会重复执行
launcher - 如果需要传递数据请使用withLifecycleAndDataEffect
key用于区分不同的调用
Implementation
void withLifecycleEffect({
LLauncher? launchOnFirstCreate,
LLauncher? launchOnFirstStart,
LLauncher? launchOnFirstResume,
LLauncher? repeatOnStarted,
LLauncher? repeatOnResumed,
LLauncher? launchOnDestroy,
Object? key,
}) {
if (key != null) {
final observer = withLifecycleExtData(
factory2: (l) {
final observer = _LLauncherObserver._(this);
observer._setLaunchers(
launchOnFirstCreate,
launchOnFirstStart,
launchOnFirstResume,
launchOnDestroy,
repeatOnStarted,
repeatOnResumed);
l.addLifecycleObserver(observer);
return observer;
},
key: key,
);
observer._replaceLaunchers(
repeatOnStarted, repeatOnResumed, launchOnDestroy);
return;
}
final lifecycle = Lifecycle.of(this);
final ctx = this;
final cache = lifecycle.extData
.putIfAbsent<Map<BuildContext, _LLauncherObserver>>(
key: _withLifecycleKey, ifAbsent: WeakHashMap.identity);
final observer = cache.putIfAbsent(ctx, () {
final observer = _LLauncherObserver._(ctx);
observer._setLaunchers(
launchOnFirstCreate,
launchOnFirstStart,
launchOnFirstResume,
launchOnDestroy,
repeatOnStarted,
repeatOnResumed);
lifecycle.addObserver(observer);
lifecycle.addLifecycleObserver(LifecycleObserver.eventDestroy(
() => cache.remove(observer._context.target)));
return observer;
});
observer._replaceLaunchers(
repeatOnStarted, repeatOnResumed, launchOnDestroy);
}