Flutter:如何在没有小部件的情况下跟踪应用程序生命周期

Flutter: How to track app lifecycle without a widget

我参与了 FlutterSound 项目,该项目作为包含 api 的包提供,就此问题而言,不包含小部件。

api 需要在应用程序更改其状态 (AppLifecycleState.pause/resume) 时处理事件。 (当应用程序 paused/resumed 时,我们需要 stop/resume 音频)。

我可以看到如何使用 WidgetsBindingObserver 在小部件中执行此操作,但 api 需要相同的信息而无需依赖小部件。

SchedulerBinding class 有一个 handleAppLifecycleStateChanged 方法,它似乎提供了所需的信息,但不清楚如何在小部件之外实现它。

下面是一个代码示例,可以在不直接涉及小部件的情况下侦听 AppLifecycleState 更改事件:

import 'package:flutter/material.dart';

class MyLibrary with WidgetsBindingObserver {
  AppLifecycleState _state;

  AppLifecycleState get state => _state;

  MyLibrary() {
    WidgetsBinding.instance.addObserver(this);
  }

  /// make sure the clients of this library invoke the dispose method
  /// so that the observer can be unregistered
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    this._state = state;
  }

  void someFunctionality() {
    // your library feature
  }
}

例如,现在您可以在 flutter 小部件中实例化该库,从那时起它将开始侦听 AppLifecycleState 中的任何更改。

请注意,上面的代码没有处理冗余绑定。例如,如果你的库的客户端要在不同的地方多次初始化库,那么 didChangeAppLifecycleState() 方法将在每次状态更改时被触发多次(取决于创建的库实例的数量).此外,我不确定所提出的解决方案是否符合 flutter 最佳实践。尽管如此,它还是解决了问题,希望对您有所帮助!