flutter에서 권한 설정을 해주려면 먼저 permission_handler 플러그인을 pubspec.yaml에 설치해준다.
아래의 링크로 들어가서 설치해준다.
pub.dev/packages/permission_handler
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 플러그인을 설치해준다.
- 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;
}
'Flutter' 카테고리의 다른 글
[j Flutter] Switch 스위치 / Check Box 체크박스 구현하기 (0) | 2020.08.25 |
---|---|
[j Flutter] QR코드 읽기 / 생성하기 (0) | 2020.08.21 |
[j Flutter] 토스트메세지(ToastMessage), 스낵바(SnackBar) (0) | 2020.08.07 |
[j Flutter] Could not resolve all task dependencies for configuration ':url_launcher:debugCompileClasspath'. 오류 해결 (0) | 2020.06.29 |
[j Flutter] WillPopScope사용해서 안드로이드 뒤로가기 막기 (0) | 2020.06.26 |