Flutter 生命周期实际测试出来的与Flutter官网描述的有些不同,具体往下看
目录:
1、Flutter 生命周期
2、Todo:自己实测与Flutter官网描述出现的不一致情况!
1、Flutter 生命周期
官网介绍如下
AppLifecycleState:Flutter widget 生命周期状态
–官网介绍如下图:
||
|:-|
实测
1.1:AppLifecycleState.resumed
可见,并且响应用户输入
1.2:AppLifecycleState.inactive
或许可见,但一定不响应用户输入;此状态表明,应用程序处于非活动状态;在Android和IOS上测试都会出现:inactive出现在resumed和paused之前。
1.3:AppLifecycleState.paused
不可见,进入后台;此状态表明,将随时进入suspending
1.4:AppLifecycleState.suspending
在Android和IOS上,暂时未测出此状态的出现
2、Todo
2、Todo:自己实测与Flutter官网描述出现的不一致情况!
官网测试代码
import 'package:flutter/widgets.dart';
class LifecycleWatcher extends StatefulWidget {
@override
_LifecycleWatcherState createState() => _LifecycleWatcherState();
}
class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
AppLifecycleState _lastLifecycleState;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
setState(() {
_lastLifecycleState = state;
});
}
@override
Widget build(BuildContext context) {
if (_lastLifecycleState == null)
return Text('This widget has not observed any lifecycle changes.', textDirection: TextDirection.ltr);
return Text('The most recent lifecycle state this widget observed was: $_lastLifecycleState.',
textDirection: TextDirection.ltr);
}
}
void main() {
runApp(Center(child: LifecycleWatcher()));
}
描述1:
此测试代码不够完善,因为:“此代码只能测试resumed一个状态,其他的状态是测试不出来的”
描述2:
Flutter的渲染机制:调用setState((){})函数时,会启动Flutter重绘制机制,进而调用build(BuildContext context)函数。
问题:
当实际测试时并非如描述2那般一模一样。如上图代码所示,在didChangeAppLifecycleState函数中调用setState,在build中显示AppLifecycleState(也就是widget的生命周期状态)当Widget生命周期状态切换为inactive或paused状态时,实际测试出的结果是,并没有调用build函数进行重绘
进一步更新上述测试进度
出现上方的问题的原因在与:Flutter生命周期的转换会影响到build函数的调用时机(上方在build函数中输入的数据无法根据生命周期的变动而变动就是因为在某些生命周期内build是没有备调用渲染!)。
未完待续。。。