我找到了一些解决方案,每个方案都有自己的优缺点。最好的答案是
FocusDetector
。
最佳选择
焦点检测器
(Edson Bueno)
FocusDetector处理原始问题中涉及的所有案例。您为一个名为
FocusDetector
。两个相关的回调是:
-
onFocusGained
=
onResume
-
onFocusLost
=
onPause
-
Cons
-
Isnt由Flutter或Google维护(但它使用
VisibilityDetector
和
WigetBindingObserver
发动机罩下)
-
默认值
VisibilityDetectorController.updateInterval
是500毫秒,这意味着事件启动得有些晚。
借用我的一个
favorite posts
:
示例小工具
class PageState extends State<Page> {
@override
void initState() {
super.initState();
log("onCreate / viewDidLoad / initState");
WidgetsBinding.instance?.addPostFrameCallback((timeStamp) {
layoutComplete();
});
}
// Bonus one I've found helpful, once layout is finished
void layoutComplete() {
log("onActivityCreated / viewDidLoad / layoutComplete");
}
void viewWillAppear() {
log("onResume / viewWillAppear / onFocusGained");
}
void viewWillDisappear() {
log("onPause / viewWillDisappear / onFocusLost");
}
@override
void dispose() {
log("onDestroy / viewDidUnload / dispose");
super.dispose();
}
@override
Widget build(BuildContext context) {
return FocusDetector(
onFocusGained: viewWillAppear,
onFocusLost: viewWillDisappear,
child: Text('Rest of my widget'),
);
}
}
其他选项