withLifecycleEffect method

void withLifecycleEffect({
  1. LLauncher? launchOnFirstCreate,
  2. LLauncher? launchOnFirstStart,
  3. LLauncher? launchOnFirstResume,
  4. LLauncher? repeatOnStarted,
  5. LLauncher? repeatOnResumed,
  6. LLauncher? launchOnDestroy,
})

从当前的Context中获取Lifecycle并使用

Implementation

void withLifecycleEffect({
  LLauncher? launchOnFirstCreate,
  LLauncher? launchOnFirstStart,
  LLauncher? launchOnFirstResume,
  LLauncher? repeatOnStarted,
  LLauncher? repeatOnResumed,
  LLauncher? launchOnDestroy,
}) {
  final lifecycle = Lifecycle.of(this);

  final ctx = this;

  final cache = lifecycle.extData
      .putIfAbsent<Map<BuildContext, _LLauncherObserver>>(
          key: _withLifecycleKey, ifAbsent: () => WeakHashMap());
  final observer = cache.putIfAbsent(ctx, () {
    final observer = _LLauncherObserver._(ctx);
    observer.launchOnFirstCreate = launchOnFirstCreate;
    observer.launchOnFirstStart = launchOnFirstStart;
    observer.launchOnFirstResume = launchOnFirstResume;
    observer.launchOnDestroy = launchOnDestroy;

    if (repeatOnStarted != null) {
      observer.repeatOnStarted = repeatOnStarted;
    }
    if (repeatOnResumed != null) {
      observer.repeatOnResumed = repeatOnResumed;
    }

    lifecycle.addObserver(observer);
    lifecycle.addLifecycleObserver(
        LifecycleObserver.eventDestroy(() => cache.remove(ctx)));
    return observer;
  });

  if (repeatOnStarted != null) {
    observer.repeatOnStarted = repeatOnStarted;
  }
  if (repeatOnResumed != null) {
    observer.repeatOnResumed = repeatOnResumed;
  }

  if (launchOnDestroy != null) {
    observer.launchOnDestroy = launchOnDestroy;
  }
}