didChangeAppLifecycleState method

  1. @override
void didChangeAppLifecycleState(
  1. AppLifecycleState state
)
override

Called when the system puts the app in the background or returns the app to the foreground.

An example of implementing this method is provided in the class-level documentation for the WidgetsBindingObserver class.

This method exposes notifications from SystemChannels.lifecycle.

See also:

Implementation

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  assert(_debugAssertNotDisposed());
  final AppLifecycleState? previousState = _lifecycleState;
  if (state == previousState) {
    // Transitioning to the same state twice doesn't produce any
    // notifications (but also won't actually occur).
    return;
  }
  _lifecycleState = state;
  switch (state) {
    case AppLifecycleState.resumed:
      assert(previousState == null || previousState == AppLifecycleState.inactive || previousState == AppLifecycleState.detached, 'Invalid state transition from $previousState to $state');
      onResume?.call();
    case AppLifecycleState.inactive:
      assert(previousState == null || previousState == AppLifecycleState.hidden || previousState == AppLifecycleState.resumed, 'Invalid state transition from $previousState to $state');
      if (previousState == AppLifecycleState.hidden) {
        onShow?.call();
      } else if (previousState == null || previousState == AppLifecycleState.resumed) {
        onInactive?.call();
      }
    case AppLifecycleState.hidden:
      assert(previousState == null || previousState == AppLifecycleState.paused || previousState == AppLifecycleState.inactive, 'Invalid state transition from $previousState to $state');
      if (previousState == AppLifecycleState.paused) {
        onRestart?.call();
      } else if (previousState == null || previousState == AppLifecycleState.inactive) {
        onHide?.call();
      }
    case AppLifecycleState.paused:
      assert(previousState == null || previousState == AppLifecycleState.hidden, 'Invalid state transition from $previousState to $state');
      if (previousState == null || previousState == AppLifecycleState.hidden) {
        onPause?.call();
      }
    case AppLifecycleState.detached:
      assert(previousState == null || previousState == AppLifecycleState.paused, 'Invalid state transition from $previousState to $state');
      onDetach?.call();
  }
  // At this point, it can't be null anymore.
  onStateChange?.call(_lifecycleState!);
}