三、完整代码示例
完整代码示例 :
import 'package:flutter/material.dart'; class AppLifeCyclePage extends StatefulWidget { @override _AppLifeCyclePageState createState() => _AppLifeCyclePageState(); } class _AppLifeCyclePageState extends State<AppLifeCyclePage> with WidgetsBindingObserver { @override void initState() { super.initState(); /// 如果想要监听应用生命周期 , 要先绑定观察者 , /// 绑定完成后 , 如果应用生命周期发生了变化 , /// 就会回调 didChangeAppLifecycleState 方法 ; WidgetsBinding.instance.addObserver(this); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( // 标题 title: Text("应用生命周期"), // 返回按钮 leading: BackButton(), ), body: Container( // 居中设置 alignment: Alignment.center, child: Text("应用生命周期"), ), ); } /// 移出组件中注册的观察者 @override void dispose() { super.dispose(); WidgetsBinding.instance.removeObserver(this); } /// 当应用生命周期发生变化时 , 会回调该方法 @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); print("当前的应用生命周期状态 : ${state}"); if(state == AppLifecycleState.paused){ print("应用进入后台 paused"); }else if(state == AppLifecycleState.resumed){ print("应用进入前台 resumed"); }else if(state == AppLifecycleState.inactive){ // 应用进入非活动状态 , 如来了个电话 , 电话应用进入前台 // 本应用进入该状态 print("应用进入非活动状态 inactive"); }else if(state == AppLifecycleState.detached){ // 应用程序仍然在 Flutter 引擎上运行 , 但是与宿主 View 组件分离 print("应用进入 detached 状态 detached"); } } }
运行效果 :
进入界面 : 进入界面后 , 由于还没有注册 WidgetsBindingObserver , 因此不打印日志 , 等界面加载完毕后 , 进行各种操作 ( 如按下 Home 键 , 按下回退键 , 按下菜单键 ) 时才打印日志 ;
按下菜单键 :
界面状态 :
打印日志 :
I/flutter (30370): 当前的应用生命周期状态 : AppLifecycleState.inactive I/flutter (30370): 应用进入非活动状态 inactive D/FlutterView(30370): Detaching from a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@9d12774 I/flutter (30370): 当前的应用生命周期状态 : AppLifecycleState.paused I/flutter (30370): 应用进入后台 paused
再次点击回到应用界面 :
界面状态 :
打印日志 :
I/flutter (30370): 当前的应用生命周期状态 : AppLifecycleState.resumed I/flutter (30370): 应用进入前台 resumed D/FlutterView(30370): Attaching to a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@9d12774
完整日志 :
# 按下菜单键 I/flutter (30370): 当前的应用生命周期状态 : AppLifecycleState.inactive I/flutter (30370): 应用进入非活动状态 inactive D/FlutterView(30370): Detaching from a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@9d12774 I/flutter (30370): 当前的应用生命周期状态 : AppLifecycleState.paused I/flutter (30370): 应用进入后台 paused # 返回界面 I/flutter (30370): 当前的应用生命周期状态 : AppLifecycleState.resumed I/flutter (30370): 应用进入前台 resumed D/FlutterView(30370): Attaching to a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@9d12774
四、相关资源
参考资料 :
Flutter 官网 : https://flutter.dev/
Flutter 插件下载地址 : https://pub.dev/packages
Flutter 开发文档 : https://flutter.cn/docs ( 强烈推荐 )
官方 GitHub 地址 : https://github.com/flutter
Flutter 中文社区 : https://flutter.cn/
Flutter 实用教程 : https://flutter.cn/docs/cookbook
Flutter CodeLab : https://codelabs.flutter-io.cn/
Dart 中文文档 : https://dart.cn/
Dart 开发者官网 : https://api.dart.dev/
Flutter 中文网 ( 非官方 , 翻译的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/
Flutter 相关问题 : https://flutterchina.club/faq/ ( 入门阶段推荐看一遍 )
博客源码下载 :
GitHub 地址 : https://github.com/han1202012/flutter_cmd ( 随博客进度一直更新 , 有可能没有本博客的源码 )
博客源码快照 : https://download.csdn.net/download/han1202012/15547438 ( 本篇博客的源码快照 , 可以找到本博客的源码 )