Общ преглед на новия клас AppLifecycleListener, въведен във Flutter v3.13

Flutter 3.13 въведе много нови функции и подобрения. Един от тях е нов клас, наречен AppLifecycleListener, който ви позволява да слушате събитията от жизнения цикъл на вашето приложение Flutter. Това е подобрение в сравнение с предишния начин за слушане на събитията от жизнения цикъл на приложението. В тази статия ще сравня старите и новите начини за слушане на събитията от жизнения цикъл на приложението и ще ви покажа как да използвате новия клас AppLifecycleListener.

Забележка: Преместих този блог в моя личен уебсайт. За по-добро изживяване при четене, актуални статии, интерактивни примери за код и малко допълнително съдържание БЕЗПЛАТНО, проверете kazlauskas.dev.

„Старият“ начин

Преди Flutter 3.13 можете да слушате събитията от жизнения цикъл на приложението, като използвате WidgetsBindingObserver mixin. За това трябваше да добавите WidgetsBindingObserver mixin към вашия 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…