Flutter.io中的Android onResume()方法等效

时间:2018-11-03 04:37:05

标签: dart flutter

我正在使用Flutter应用程序,需要弹出屏幕。我尝试了initState()方法,但是没有运气。 initState()在我第一次打开课程时被调用。

在Flutter中,我们是否有等效于Android onResume()的方法?

有什么想法吗?

3 个答案:

答案 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