Kyl*_*enn 8 lifecycle android ios flutter
我以前见过这个问题,但问题总是功能的子集。我正在寻找完全相同的生命周期事件。我可以说得更具体。
我知道 Flutter 小部件中存在的是
onCreate/ viewDidLoad=initStateonDestroy/ viewDidUnload=dispose这些是我想了解的生命周期事件(对于当前可见的 widget/route,而不是整个应用程序):
onResume/viewWillAppear在当前可见的小部件上被触发内部导航(在应用程序内导航)
A。您将路线/小部件推入堆栈
b. 您导航回路线/小部件(已经位于导航堆栈的背面)
外部导航(应用程序的后台和前台)
A。您从后台打开应用程序(路线/小部件是显示给用户的)
b. 您打开屏幕(电源按钮)并且应用程序已打开
onPause/在当前可见的小部件上viewDidDisappear被触发内部导航(在应用程序内导航)
A。您离开小部件/路线继续前进
b. 您可以通过关闭小部件/在堆栈中向后浏览来离开该小部件
外部导航(应用程序的后台和前台)
A。您将应用程序置于后台(并且路线/小部件是向用户显示的) b.您在应用程序打开的情况下关闭屏幕(电源按钮)
Kyl*_*enn 23
我找到了一些解决方案,每个解决方案都有自己的优点和缺点。最好回答这个问题的是FocusDetector。
\nFocusDetector 处理原始问题中涵盖的所有情况。您可以向名为 的包装小部件提供回调函数,而不是覆盖(如 initState() 和 dispose())FocusDetector。两个相关的回调是:
onFocusGained=onResume
onFocusLost=onPause
缺点
\nVisibilityDetector使用)WigetBindingObserverVisibilityDetectorController.updateInterval值为 500 毫秒,这意味着事件触发会稍晚一些。借用我最喜欢的一篇文章的风格:
\n\nclass PageState extends State<Page> {\n\n @override\n void initState() {\n super.initState();\n log("onCreate / viewDidLoad / initState");\n WidgetsBinding.instance?.addPostFrameCallback((timeStamp) {\n layoutComplete();\n });\n }\n\n // Bonus one I\'ve found helpful, once layout is finished\n void layoutComplete() {\n log("onActivityCreated / viewDidLoad / layoutComplete");\n }\n\n void viewWillAppear() {\n log("onResume / viewWillAppear / onFocusGained");\n }\n\n void viewWillDisappear() {\n log("onPause / viewWillDisappear / onFocusLost");\n }\n\n @override\n void dispose() {\n log("onDestroy / viewDidUnload / dispose");\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return FocusDetector(\n onFocusGained: viewWillAppear,\n onFocusLost: viewWillDisappear,\n child: Text(\'Rest of my widget\'),\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\ndidPush=onResume当前屏幕被推开
didPopNext=onResume当前屏幕正在导航回
didPop=onPause关闭当前页面/返回
didPushNext=onPause向前导航到新页面
缺点:
\nAppLifecycleState.resumed= 应用程序可见并响应用户输入
AppLifecycleState.paused= 应用程序不可见并且不响应用户输入
缺点:
\nonVisibilityChanged(能见度==1)=onResume
onVisibilityChanged(能见度== 0)=onPause
缺点:
\n| 归档时间: |
|
| 查看次数: |
6596 次 |
| 最近记录: |