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 最佳实践。尽管如此,它还是解决了问题,希望对您有所帮助!
我参与了 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 最佳实践。尽管如此,它还是解决了问题,希望对您有所帮助!