withLifecycleEffect method

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

从当前的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);
}