【问题标题】:detect method when user navigate back to application from setting screen in flutter当用户从颤动的设置屏幕导航回应用程序时检测方法
【发布时间】:2020-06-05 06:38:25
【问题描述】:

我正在使用以下代码将用户导航到设置屏幕以手动允许位置权限:

 PermissionHandler().openAppSettings();

一旦用户允许此权限,我将检查该权限是否被授予。如果获得批准,我将允许用户导航到下一个屏幕。

 @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    checkPermission(); //this will check the status of permission when the user returns back from the settings page.
  }


  checkPermission() async {
    var location = Location();
    bool _permission = false;
    bool serviceStatus = await location.serviceEnabled();
    if (serviceStatus) {
      print("enable");
      _permission = await location.requestPermission();
      print("Permission result: $_permission");
      if (_permission) {
         // Navigate to next screen
      }else{
        print("permission not enable");
      }
    } else {
      print("not enable");
    }
  }

问题是didChangeAppLifecycleState 方法总是被屏幕上的任何操作调用。当用户从后台导航到应用程序或从设置屏幕导航到屏幕时,我应该如何检测状态。 以下是状态,但没有一个有用。

  • resumed
  • inActivate
  • paused
  • detached

【问题讨论】:

  • 在调用 didChangeAppLifecycleState 时检查 AppLifeCycleState,它可以是非活动的、暂停的、恢复的、分离的。 api.flutter.dev/flutter/dart-ui/AppLifecycleState-class.html
  • @Karthik 谢谢你的回复。 ApplifecycleState.resume 被调用。但是如果我也关闭位置对话框,这个单位总是被调用。我真正想要检测的是检测背景到前景动作的特定方法或标志

标签: android ios flutter dart


【解决方案1】:

您的代码只缺少一件事:您没有使用state 变量来检查当前应用的生命周期状态。在运行checkPermission() 函数之前,您可以简单地使用它来检查当前的应用程序状态。

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  // If user resumed to this app, check permission
  if(state == AppLifecycleState.resumed) {
    checkPermission();
  }
}

现在 checkPermission() 只有在当前应用的生命周期状态为 resumed 时才会被调用。

【讨论】:

  • 感谢您的回复。当我关闭位置权限的默认对话框时也会调用恢复状态,当我将应用程序从后台移动到前台时也会调用相同的状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 2021-12-16
  • 2018-05-06
相关资源
最近更新 更多