Обзор нового класса AppLifecycleListener, представленного во Flutter v3.13

Flutter 3.13 представил множество новых функций и улучшений. Одним из них является новый класс под названием AppLifecycleListener, который позволяет вам прослушивать события жизненного цикла вашего приложения Flutter. Это улучшение по сравнению с предыдущим способом прослушивания событий жизненного цикла приложения. В этой статье я сравню старые и новые способы прослушивания событий жизненного цикла приложения и покажу, как использовать новый класс AppLifecycleListener.

Примечание. Я переместил этот блог на свой личный сайт. Для более удобного чтения, получения свежих статей, интерактивных примеров кода и дополнительного контента БЕСПЛАТНО посетите kazlauskas.dev.

По старому

До Flutter 3.13 вы могли прослушивать события жизненного цикла приложения с помощью миксина WidgetsBindingObserver. Для этого вам пришлось добавить миксин WidgetsBindingObserver в ваш класс State и переопределить метод didChangeAppLifecycleState. В методе didChangeAppLifecycleState вы можете прослушивать события жизненного цикла приложения, используя предоставленное значение состояния (AppLifecycleState).

class AppLifecyclePageOld extends StatefulWidget {
  const AppLifecyclePageOld({super.key});

  @override
  State<AppLifecyclePageOld> createState() => _AppLifecyclePageOldState();
}

class _AppLifecyclePageOldState extends State<AppLifecyclePageOld>
    // Use the WidgetsBindingObserver mixin
    with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();

    // Register your State class as a binding observer
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    // Unregister your State class as a binding observer
    WidgetsBinding.instance.removeObserver(this);

    super.dispose();
  }

  // Override the didChangeAppLifecycleState method and
  // listen to the app lifecycle state changes
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);

    switch (state) {
      case AppLifecycleState.detached:
        _onDetached();
      case AppLifecycleState.resumed:
        _onResumed();
      case AppLifecycleState.inactive:
        _onInactive();
      case…