【问题标题】:How to ask multiple permissions from user in flutter?如何在颤动中向用户询问多个权限?
【发布时间】:2020-07-23 23:24:16
【问题描述】:

我在运行时被询问了用户的权限,但我需要询问多个权限,例如电话、联系人、短信等,所以我一直坚持如何调用这个方法一个接一个有什么方法可以询问之后一个权限完成了另一个弹出窗口的打开?

      import 'package:permission_handler/permission_handler.dart';

       class PermissionService{
         final PermissionHandler _permissionHandler = PermissionHandler();

         Future<bool> _requestPermissionContact(PermissionGroup permission) async {
           var result = await _permissionHandler.requestPermissions([permission]);
           if (result[PermissionGroup.contacts] == PermissionStatus.granted) {
             print("sfhalsjfhas fasdhufaiusfh aloifahdf oalsifu");
           }

         }


         Future<bool> requestContactPermission({Function onPermissionDenied}) async {
           var granted = await _requestPermissionContact(PermissionGroup.contacts);
           if (!granted) {
             onPermissionDenied();
           }
           return granted;
         }

         Future<bool> hasContactPermission() async {
            return hasPermission(PermissionGroup.contacts);
         }

         Future<bool> _requestPermissionSms(PermissionGroup permission) async {
           var result = await _permissionHandler.requestPermissions([permission]);
           if (result[permission] == PermissionStatus.granted) {
             print("sfhalsjfhas fasdhufaiusfh aloifahdf oalsifu");
             return true;
           }
           return false;
         }

         Future<bool> requestSmsPermission({Function onPermissionDenied}) async {
           var granted = await _requestPermissionSms(PermissionGroup.sms);
           if (!granted) {
             onPermissionDenied();
           }
           return granted;
         }

         Future<bool> hasSmsPermission() async {
           _requestPermissionPhone(PermissionGroup.phone);
           return hasPermission(PermissionGroup.sms);
         }

         Future<bool> _requestPermissionPhone(PermissionGroup permission) async {
           var result = await _permissionHandler.requestPermissions([permission]);
           if (result[permission] == PermissionStatus.granted) {
             return true;
           }
           return false;
         }

         Future<bool> requestPhonePermission({Function onPermissionDenied}) async {
           var granted = await _requestPermissionPhone(PermissionGroup.phone);
           if (!granted) {
             onPermissionDenied();
           }
           return granted;
         }

         Future<bool> hasPhonePermission() async {
           return hasPermission(PermissionGroup.phone);
         }

         Future<bool> hasPermission(PermissionGroup permission) async {
           var permissionStatus =
           await _permissionHandler.checkPermissionStatus(permission);
           return permissionStatus == PermissionStatus.granted;
         }
       }    

这是我的权限类,我想调用这三个权限,在 initState 中我被称为这样

    @override
    initState() {

    permissionAcess();
    permissionAcessSms();
    permissionAcessPhone();

    super.initState();
  }


  Future permissionAcess() {
    PermissionService().requestContactPermission(onPermissionDenied: () {
      print('Permission has been denied');
    });
  }

  Future permissionAcessSms() {
    PermissionService().requestSmsPermission(onPermissionDenied: () {
      print('Permission has been denied');
    });
  }

  Future permissionAcessPhone() {
    PermissionService().requestPhonePermission(onPermissionDenied: () {
      print('Permission has been denied');
    });
  }          

但是它只调用了一个权限,那么如何在运行时调用所有这三个权限呢?

【问题讨论】:

  • 您不应该在应用运行后立即请求权限。 Apple 人机界面指南建议您在用户执行需要许可的任务时请求许可;这样请求就在上下文中。此外,由于您已标记 iOS,您应该知道电话和短信权限不适用于 iOS;在 iOS 上无法访问此信息。
  • @Paulw11 我还需要请求任何许可

标签: android ios flutter dart permissions


【解决方案1】:

是的,您可以同时请求多个权限,只需像这样更新您的代码 您的 PermissionServices 文件将是

   import 'package:permission_handler/permission_handler.dart';

   class PermissionService{
     final PermissionHandler _permissionHandler = PermissionHandler();

     Future<bool> _requestPermission() async {
       var result = await _permissionHandler.requestPermissions([PermissionGroup.phone,PermissionGroup.contacts,PermissionGroup.sms]);
       if (result == PermissionStatus.granted) {
         return true;
       }
       return false;
     }

     Future<bool> requestPermission({Function onPermissionDenied}) async {
       var granted = await _requestPermission();
       if (!granted) {
         onPermissionDenied();
       }
       return granted;
     }

     Future<bool> hasPhonePermission() async {
       return hasPermission(PermissionGroup.phone);
     }

     Future<bool> hasPermission(PermissionGroup permission) async {
       var permissionStatus =
       await _permissionHandler.checkPermissionStatus(permission);
       return permissionStatus == PermissionStatus.granted;
     }
   }  

你的 initState 将是

  @override
  initState(){
    permissionAcessPhone();
    super.initState();
  }

  Future permissionAcessPhone() {
     PermissionService().requestPermission(onPermissionDenied: () {
        print('Permission has been denied');
     });
  }     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多