恢复→应用程序是可见的,并响应用户输入
但是似乎没有检测到应用程序是否打开了。
我已经在AppLifecycleState
中实现了main.dart
SystemChannels.lifecycle.setMessageHandler((msg) {
switch (msg) {
case 'AppLifecycleState.paused':
{
function...
}
break;
case 'AppLifecycleState.resumed':
{
function...
}
break;
}
return Future.value();
});
如何检查应用程序是否在颤振中成为前台(基于简历和应用程序打开)?
发布于 2022-08-18 20:45:54
我不知道为什么内置的生命周期管理不提供一个应用程序开放事件,但这是我们如何做到的。
我们定义了我们自己的枚举,它复制了添加AppLifecycleState
的opened
/// see [AppLifecycleState] but added [opened]
enum AppState {
opened, // <--
resumed,
paused,
inactive,
detached,
}
然后,我们定义一个小部件,它使用initialState
触发opened
事件,并使用WidgetsBindingObserver
混合来检测其他更改。
class AppLifecycleTracker extends StatefulWidget {
final Widget child;
final void Function(AppState state) didChangeAppState;
const AppLifecycleTracker({
Key? key,
required this.didChangeAppState,
required this.child,
}) : super(key: key);
@override
State<AppLifecycleTracker> createState() => _AppLifecycleTrackerState();
}
class _AppLifecycleTrackerState extends State<AppLifecycleTracker>
with WidgetsBindingObserver {
@override
void initState() {
super.initState();
widget.didChangeAppState(AppState.opened);
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
AppState s;
switch (state) {
case AppLifecycleState.resumed:
s = AppState.resumed;
break;
case AppLifecycleState.inactive:
s = AppState.inactive;
break;
case AppLifecycleState.paused:
s = AppState.paused;
break;
case AppLifecycleState.detached:
s = AppState.detached;
break;
}
widget.didChangeAppState(state);
}
@override
Widget build(BuildContext context) {
return widget.child;
}
}
然后,一定要将其添加到小部件树的最顶端,以防止其重新呈现(否则它将再次触发opened
事件:
runApp(
AppLifecycleTracker(
didChangeAppState: (state) => log(state.name),
child: ...,
)
);
发布于 2022-01-08 12:34:20
class LifeCycleManager extends StatefulWidget {
final Widget child;
LifeCycleManager({required this.child});
_LifeCycleManagerState createState() => _LifeCycleManagerState();
}
class _LifeCycleManagerState extends State<LifeCycleManager>
with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance!.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance!.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.detached) {
} else if (state == AppLifecycleState.inactive) {
}
}
@override
Widget build(BuildContext context) {
return Container(
child: widget.child,
);
}
用生命周期管理器小部件包装您的主要材料应用程序,在生命周期管理器中,您可以根据您的需求设置条件并执行。根据这一具体任务
https://stackoverflow.com/questions/70632297
复制相似问题