Flutter:无法检测到应用是否被破坏(AppLifecycleState.detached)

时间:2019-12-26 00:52:31

标签: flutter dart

我的应用程序具有指纹安全性,但是我不知道这样做的逻辑。

同时我有这样的逻辑,当用户退出应用程序+持续时间令牌时保存(例如:07.40 + 30秒),然后如果用户再次回来,则进行比较:

 @override
  void didChangeAppLifecycleState(AppLifecycleState state) async {
  setState(() => _appLifecycleState = state);
  print(state);

 if (_appLifecycleState == AppLifecycleState.resumed) {// 07.40 30.00 > 07.40 29.00
  if(DateExit.isAfter(DateTime.now())){
   print("still available token")
   return;
  }else{ // 07.40 30.00 > 07.40 31.00
   print("expiry token , Goto Confirm Fingerprint Screen")
   final actionBox = repository.changeExpiryToken(
            userModelHive: UserModelHive()
              ..id = model.id
              ..giverName = model.giverName
              ..pinCode = model.pinCode
              ..fingerPrint = model.fingerPrint
              ..darkMode = model.darkMode
              ..expiryToken = !model.expiryToken
              ..durationToken = model.durationToken,
          );
          return actionBox;
  }
 }else{
  dateExit = DateTime.now().add(Duration(seconds: 5));
  print('Another Lifecycle');
 }
}

一切都很好,我可以检测用户是否仅交换到另一个应用程序或打开最近使用的应用程序,如果DateExit.isAfter(DateTime.now()),我可以更改tokenExpiry状态。 但是问题是,尽管我已经按照逻辑进行了处理,但是我无法检测用户是否销毁了该应用程序。

我做错了吗?

2 个答案:

答案 0 :(得分:0)

didChangeAppLifecycleState尚不存在任何状态来检查应用程序已启动。您可以在这里看到:https://api.flutter.dev/flutter/dart-ui/AppLifecycleState-class.html。在这种情况下,您应该使用initState检查

答案 1 :(得分:0)

我也遇到了同样的问题。因此,现在我找到了一种解决方案来检测应用程序是否被破坏。 在flutter中,我们有一个方法名称- despose() 在我的案例中, despose()方法未在应用程序销毁时调用。因此,我只更新了 despose()方法。请参见下面的代码。

 @mustCallSuper
  @protected
  void dispose() {
    // TODO: implement dispose
    WidgetsBinding.instance.removeObserver(this);

    print('dispose called.............');
    super.dispose();
  }

我希望它也能解决您的问题。