[Flutter] 권한 팝업 요청 기능

Woojin·2023년 9월 12일
1

Flutter

목록 보기
7/27

패키지 설치

  1. pubspec.yaml 파일에 dependencies: 를 찾아 permission_handler: ^8.3.0 을 입력
dependencies:
  flutter:
    sdk: flutter
  permission_handler: ^8.3.0
  1. 옆에 전구 모양 아이콘 클릭하여 pub get 실행
  2. import 'package:permission_handler/permission_handler.dart'; 를 main.dart 파일 가장 상단에 추가
  • permission_handler.dart 파일에 있는 함수와 변수들을 가져다쓸 수 있게 해주는 문법이다.

Android 기기 설정

  1. android/gradle.properties 파일 확인
    • 아래 코드가 입력되어 있는지 확인 후 없으면 추가
android.useAndroidX=true
android.enableJetifier=true
  1. andorid/app/build.gradle 파일

    • 아래 코드가 31로 되어있는지 확인
      • 다른 숫자면 31로 변경
      • 숫자 대신 문자가 채워져 있으면 그냥 냅두기
    android {
    	compileSdkVersion 31
  2. android/app/main/AndroidManifest 파일에 코드 추가

    • <mainfest ~~ > 아래, <application ~~~> 위에 작성
		<uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>

연락처 권한 확인

  • Permission.contacts 에서 contacts 말고 camera, location 같은 거 써서 카메라, 위치 권한 허락 받을 수 있음

  • Permission.contacts.status 라고 사용하면 연락처 권한 상태를 출력할 수 있음

    getPermission() async {
        var status = await Permission.contacts.status;
        if (status.isGranted) {
          print('허락됨');
        } else if (status.isDenied) {
          print('거절됨');
          Permission.contacts.request();   // 현재 거절된 상태니 팝업창 띄워달라는 코드
        }
      }
    • await이 붙은 이유는 await 뒤에 있는 문장이 실행되는 속도가 느리기 때문에 Dart 언어의 특징으로는 다음 줄을 먼저 실행할 것임
    • 그렇기 때문에 await을 붙여 다음 줄을 실행하지 않고 기다려 달라는 뜻이다.
    • await은 async 안에 붙어 있어야 한다.
  • Permission.contacts.request() 는 사용자에게 연락처 사용 권한을 달라고 요청

→ 주의

  • Android 11버전 이상과 iOS에서는 유저가 한 두번 이상 권한 요청을 거절하면 다시는 팝업을 띄울 수 없음
    • 앱 설정 오픈해서 유저가 직접 설정을 바꿔야 함
    • openAppSettings(); 을 작성하면 앱 설정을 오픈해줌

0개의 댓글