一旦应用程序从权限设置屏幕返回,Flutter应用程序中的空白屏幕

时间:2020-02-18 03:15:12

标签: flutter dart

我正在申请位置许可的应用程序上。 如果用户单击“拒绝”,则我正在导航用户到设置屏幕,以便他们可以手动打开位置。但是,当我从设置屏幕更改位置许可并单击返回并导航至应用程序空白屏幕时,我也无法检测到更改许可状态。 下面是代码:

import 'package:permission_handler/permission_handler.dart';
import 'package:flutter/widgets.dart';


    class LocationScreenState extends State<LocationScreen> with WidgetsBindingObserver{
      PermissionStatus _status;
      @override
      void initState() {
        super.initState();
        WidgetsBinding.instance
            .addPostFrameCallback((_) => afterFirstLayout(context));    
      }
void afterFirstLayout(BuildContext context){
     PermissionHandler().requestPermissions([PermissionGroup.locationAlways]).then(__onStatusRequested);
  }


  void __onStatusRequested(Map<PermissionGroup, PermissionStatus> statuses){
    if(statuses != PermissionStatus.granted){
       PermissionHandler().openAppSettings();
    }else{
      _status = PermissionStatus.granted;

    }
  }

1 个答案:

答案 0 :(得分:0)

这是我使用的代码。看看希望对您有帮助

void _askPermission() {
    PermissionHandler().requestPermissions(
        [PermissionGroup.locationWhenInUse]).then(_onStatusrequested);
  }

 void _onStatusrequested(Map<PermissionGroup, PermissionStatus> statuses) {
    final status = statuses[PermissionGroup.locationWhenInUse];
    if (status == PermissionStatus.neverAskAgain) {
      // openSettingsDialog();
      setState(() {
        isPermissionIgnored = true;
      });
      _updateStatus(_status);
    } else if (status == PermissionStatus.denied) {
      setState(() {
        isPermissionIgnored = false;
      });

      _updateStatus(status);
    } else if (status == PermissionStatus.granted) {
      setState(() {
        isPermissionIgnored = false;
      });

      _updateStatus(status);
    }
  }
void _updateStatus(PermissionStatus status) {
if (status != _status) {
  _status = status;
  print(_status);
}
print(status);
}