我正在使用Flutter应用程序,需要弹出屏幕。我尝试了initState()
方法,但是没有运气。 initState()
在我第一次打开课程时被调用。
在Flutter中,我们是否有等效于Android onResume()
的方法?
有什么想法吗?
答案 0 :(得分:11)
如果您转到另一个页面,当您回来时会调用然后
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondPage(),
),
).then((value) {
_refreshFirstPage();
});
答案 1 :(得分:6)
您可以使用WidgetsBindingObserver
并检查AppLifeCycleState
,如下例所示:
class YourWidgetState extends State<YourWidget> 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) {
if (state == AppLifecycleState.resumed) {
//do your stuff
}
}
}
请记住,它将在您每次打开应用程序或进入后台并返回到应用程序时调用。 (如果您的小部件处于活动状态)
如果在第一次加载窗口小部件时只想要一个侦听器,则可以使用addPostFrameCallback
进行侦听,例如以下示例:
class YourWidgetState extends State<YourWidget> {
_onLayoutDone(_) {
//do your stuff
}
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback(_onLayoutDone);
super.initState();
}
}
信息:https://docs.flutter.io/flutter/widgets/WidgetsBindingObserver-class.html
答案 2 :(得分:0)
您可以通过注册didChangeAppLifecycleState
观察者来完成此操作:
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(final AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
setState(() {
// ...your code goes here...
});
}
}
@override
Widget build(final BuildContext context) {
// ...your code goes here...
}
}
有关更多信息,请参见WidgetsBindingObserver
。