当我打开我的应用程序或在后台运行时,不会调用 didChangeAppLifecycleState() 并且不会执行打印语句。
import 'package:flutter/widgets.dart';
import 'package:flutter/material.dart';
void main(){
runApp(
MaterialApp(
home: Home(),
)
);
}
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> with WidgetsBindingObserver{
AppLifecycleState state;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
void didChangeAppLifeCycleState(AppLifecycleState appLifecycleState) {
state = appLifecycleState;
print(appLifecycleState);
print(":::::::");
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child:Text("hi")
),
),
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
didChangeAppLifeCycleState() 中的打印语句未执行。
Phu*_*ran 36
有一个拼写错误(“Lifecycle”中的小写“c”),应该是 didChangeAppLifecycleState:
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
state = state;
print(state);
print(":::::::");
}
Run Code Online (Sandbox Code Playgroud)
更新:不要忘记在 initState() 中添加观察者并在 dispose() 中删除观察者
@override
void initState() {
super.initState();
WidgetsBinding.instance!.addObserver(this);
}
// ...
@override
void dispose() {
WidgetsBinding.instance!.removeObserver(this);
super.dispose();
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
use*_*019 18
这不是 OP 问题的答案,每次我遇到这个问题时,我都忘记打电话WidgetsBinding.instance.addObserver(this);了initState()。
如果didChangeAppLifecycleState没有为您调用,请不要忘记将您的实现类添加为侦听器。
在initState()和 中查看 OP 的代码,并dispose()确保您也这样做。
Say*_*yka 16
我必须将问题中的代码与上述两个答案结合起来才能得到最终结果。因此,让我添加一个简单的示例来说明如何正确使用 AppLifeCycleState。
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
// --
print('Resumed');
break;
case AppLifecycleState.inactive:
// --
print('Inactive');
break;
case AppLifecycleState.paused:
// --
print('Paused');
break;
case AppLifecycleState.detached:
// --
print('Detached');
break;
case AppLifecycleState.hidden:
// A new **hidden** state has been introduced in latest flutter version
print('Hidden');
break;
}
}
@override
Widget build(BuildContext context) {
return Container();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5790 次 |
| 最近记录: |