当应用程序进入前台或后台时,不会调用AppLifcycleState.didChangeLifecycleState()函数

时间:2019-01-31 14:39:04

标签: dart flutter

当我打开我的应用程序或在后台运行时,未调用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")
        ),
      ),
    );
  }
}
}

didChangeAppLifeCycleState()中的打印语句未执行。

2 个答案:

答案 0 :(得分:11)

这不是 OP 问题的答案,每次遇到这个问题时,我都忘记在 WidgetsBinding.instance.addObserver(this); 中调用 initState()

如果没有为您调用 didChangeAppLifecycleState,请不要忘记将您的实现类添加为侦听器。

查看 initState()dispose() 中的 OP 代码并确保您也这样做。

答案 1 :(得分:0)

有一个拼写错误(“生命周期”中的小写字母“ c”),应为didChangeAppLifecycleState:

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
   state = state;
   print(state);
   print(":::::::");
}

希望有帮助!