본문 바로가기

Flutter

[j Flutter] 권한 설정하기 (Permission)

728x90
반응형

flutter에서 권한 설정을 해주려면 먼저 permission_handler 플러그인을 pubspec.yaml에 설치해준다.

 

아래의 링크로 들어가서 설치해준다.

 

pub.dev/packages/permission_handler

 

permission_handler | Flutter Package

Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.

pub.dev

 

1. 설치가 다끝났으면 android와 ios 각각 부분에 필요한 권한을 추가해준다.

 

예를 들어 카메라 권한을 얻고 싶다면

- android : Manifest.xml 에 <uses-permission android:name="android.permission.CAMERA" />를 추가해준다.

- ios : info.plist파일에 카메라 권한 : Privacy - Camera Usage Description를 추가해준다.

        value에는 카메라권한 관련된 문구를 적어주면 된다.

 

 

2. 권한을 추가할 dart파일에 import 'package:permission_handler/permission_handler.dart'; import 해준다.

 

3. 권한을 체크하는 코드이다. 하나라도 허용이 안됐으면 false가 된다.

  Future<bool> checkPermission() async{
    Map<Permission, PermissionStatus> statuses =
        await[Permission.camera].request(); //여러가지 퍼미션을하고싶으면 []안에 추가하면된다. (팝업창이뜬다)

    bool per= true;

    statuses.forEach((permission, permissionStatus){
      if(!permissionStatus.isGranted){
        per = false; //하나라도 허용이안됐으면 false
      }
    });

    return per;
  }

 

4. 권한이 세팅이 안되어있을 때 즉 false일 때 앱 세팅 화면으로 이동하는 코드이다. 

 - app_settings 플러그인을 설치해준다.

pub.dev/packages/app_settings

 

app_settings | Flutter Package

A Flutter plugin for opening iOS and Android phone settings from an app.

pub.dev

- import 'package:app_settings/app_settings.dart';를 import해준 뒤 해당 코드를 추가해준다.

AppSettings.openAppSettings();

 

 

 

*** 8.2.2 버전부터는 compileSdkVersion을 31로 설정해야 합니다.

 

 

Future<bool> requestCameraPermission(BuildContext context) async {
    // PermissionStatus status = await Permission.storage.request();
    // var status = await requestCameraPermission(context);

    if (PermissionHandler().checkPermissionStatus(PermissionGroup.camera) ==
            PermissionStatus.denied ||
        PermissionHandler().checkPermissionStatus(PermissionGroup.storage) ==
            PermissionStatus.denied) {
      // 허용이 안된 경우
      showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              content: Text("권한 설정을 확인해주세요."),
              actions: [
                ElevatedButton(
                    onPressed: () {
                      PermissionHandler().openAppSettings(); // 앱 설정으로 이동
                    },
                    child: Text('설정하기')),
              ],
            );
          });
      print("permission denied by user");
      return false;
    }
    print("permission ok");
    return true;
  }
728x90
반응형