我需要创建一个登录表单。用户成功登录后,我需要启动某种计时器(例如:3分钟),因此如果用户对应用程序没有反应或者换句话说,如果Flutter应用程序状态暂停、挂起或无效超过3分钟,则应用程序将返回到主登录页面。只要用户与应用程序进行交互,我就需要取消计时器,并且只有当应用程序状态暂停、挂起或无效时,我才需要启动计时器。我该怎么做?
我尝试实现“WidgetsBindingObserver”,但它似乎不像我想要的那样工作。如果用户成功输入并在应用程序中导航,则WidgetsBindingObserver会失败(错误:小部件的状态对象不再出现在小部件树中)。
我的问题是如何实现基于时间的Flutter应用程序生命周期,只要用户与应用程序进行交互,生命周期计时器就会启动?如果没有用户交互,生命周期计时器将启动,如果在计时器结束之前有用户交互,则必须取消计时器。
我尝试实现“WidgetsBindingObserver”,但它似乎不像我想要的那样工作。如果用户成功输入并在应用程序中导航,则WidgetsBindingObserver会失败(错误:小部件的状态对象不再出现在小部件树中)。
我的问题是如何实现基于时间的Flutter应用程序生命周期,只要用户与应用程序进行交互,生命周期计时器就会启动?如果没有用户交互,生命周期计时器将启动,如果在计时器结束之前有用户交互,则必须取消计时器。
class _MyUserHomePageState extends State<MyUserHomePage> with WidgetsBindingObserver {
AppLifecycleState _appLifecycleState;
@override
void initState() {
_appStatePasue = false;
WidgetsBinding.instance.addObserver(this);
super.initState();
}
// TODO: DID_CHANGE_APP_LIFE_CYCLE
void didChangeAppLifecycleState(AppLifecycleState state) {
setState(() {
_appLifecycleState = state;
if(_appLifecycleState == AppLifecycleState.paused ||
_appLifecycleState == AppLifecycleState.inactive ||
_appLifecycleState == AppLifecycleState.suspending) {
_appStatePasue = true;
print("timer---fired: $_appLifecycleState");
_timer = Timer.periodic(Duration(minutes: 1), _capitalCallback);
print(_appLifecycleState);
} else {
_appStatePasue = false;
}
});
}
// TODO: APP_LIFE_CYCLE__CALLBACK
void _capitalCallback(_timer) {
if(_appStatePasue == true) {
_timer.cancel();
print("return---main---page: $_appLifecycleState");
setState(() {
Navigator.push(
context,
SlideRightRoute(widget: MyApp())
);
});
} else {
_timer.cancel();
print("timer---canceled: $_appLifecycleState");
}
}
@override
void dispose() {
super.dispose();
}
@override
void onDeactivate() {
super.deactivate();
}
@override
Widget build(BuildContext context) {
return new Scaffold (
);
}
}