美文网首页flutter
Flutter 生命周期

Flutter 生命周期

作者: 总会颠沛流离 | 来源:发表于2019-12-10 09:35 被阅读0次
    image

    基本场景的使用:

    1:初始化

    initState ==========>didChangeDependencies========>build

    image
    2:初始化

    小菜尝试页面按钮点击弹框处理,均不会涉及生命周期变化,只是在build
    更新Widget 资源 ;但若进行热加载生命周期如下:

    reassemble -> didUpdateWidget -> build

    image.png
    3:横竖屏的切换

    didUpdateWidget -> build -> didUpdateWidget -> build (执行两次)

    4:切换后台

    didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build

    image.png
    5:切换前台

    didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> build


    image.png
    6. 销毁页面

    deactivate -> dispos

    image.png

    7. 打开新的页面

    新页面initState -> didChangeDependencies -> build -> 旧页面deactivate -> didChangeDependencies -> build (新页面初始化+旧页面置于后台)


    image.png

    8. 新页面切至后台(旧页面未销毁)

    旧/新页面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build

    image

    9. 新页面切回前台

    旧/新页面didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> build

    image

    10. 新页面销毁

    旧页面deactivate -> build(AppLifecycleState.resumed) -> 新页面deactivate -> dispose

    image
    1. 进入分屏窗口
      didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.paused) -> build (与切至后台相同)
    image.png image.png
    1. 进行分屏
      didChangeAppLifecycleState(AppLifecycleState.inactive) -> didChangeAppLifecycleState(AppLifecycleState.resumed) -> didChangeAppLifecycleState(AppLifecycleState.inactive) -> build
    image.png
    image.png

    13. 获取焦点

    didChangeAppLifecycleState(AppLifecycleState.resumed) -> build

    image
    14. 屏幕大小调整

    与 Android 不同,调整屏幕大小不会进行生命周期变化,前提是当前应用已获取焦点,若未获取焦点,则会在调整屏幕大小为全屏时进行获取焦点的生命周期方法;

    总结

    1`: 生命周期整体分为三个部分:初始化 / 状态改变 / 销毁;
    2:initState 在整个生命周期中的初始化阶段只会调用一次
    3:didChangeDependencies 当 State 对象依赖发生变动时调用;
    4:didUpdateWidget 当 Widget 状态发生改变时调用;实际上每次更新状态时,Flutter 会创建一个新的 Widget,并在该函数中进行新旧 Widget 对比;一般调用该方法之后会调用 build;
    5:reassemble 只有在 debug 或 热重载 时调用;
    6:deactivate 从 Widget Tree 中移除 State 对象时会调用,一般用在 dispose 之前;
    7:dispose 用于 Widget 被销毁时,通常会在此方法中移除监听或清理数据等,整个生命周期只会执行一次;
    8:resumed 应用程序可见且获取焦点状态,类似于 Android onResume();
    9:inactive 应用程序处于非活动状态;
    10:paused 应用程序处于用户不可见,不响应用户状态,处于后台运行状态,类似于 Android onPause();

    image.png

    相关文章

      网友评论

        本文标题:Flutter 生命周期

        本文链接:https://www.haomeiwen.com/subject/auywgctx.html