조용한 담장

Flutter : permission_handler 본문

Flutter

Flutter : permission_handler

iosroid 2019. 11. 5. 16:40

permission_handler

사용자에게 앱 기능을 위한 권한을 요구하는 Flutter 패키지 이다.

https://pub.dev/packages/permission_handler

이 패키지를 사용하기 위해서 이 앱이 시스템에 요구하는 권한에 대한 정보를 추가해야 한다.

Android 는 AndroidManifest.xml, iOS 는 Info.plist 파일에 내용을 추가해야 한다.

안드로이드 환경에서 테스트 해 보았다.

패키지 설치

pubspec.yaml 파일 수정.

dependencies:
    path_provider: ^1.4.0

AndroidManifest.xml 수정

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >

    <!-- Permissions options for the `storage` group -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application ...

Storage 권한만 추가했다.

Main.dart

import 'package:permission_handler/permission_handler.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
...

패키지를 추가한다.

아래의 그림과 같이 버튼을 통해 권한 확인과 요청 동작을 구현한다.

class _MyHomePageState extends State<MyHomePage> {
bool _storagePermission = false;
Future<bool> _checkPermission() async {
PermissionStatus storagePermissionStatus = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage);
if (storagePermissionStatus == PermissionStatus.granted) {
print('Storage permission is granted.');
return true;
} else {
print('Storage permission is not granted.');
return false;
}
}

첫번째 버튼을 클릭하면 권한을 체크하는 기능의 함수이다.

Future<bool> _requestPermission() async {
var result = await PermissionHandler().requestPermissions([PermissionGroup.storage]);
if (result[PermissionGroup.storage] == PermissionStatus.granted) {
print('Storage permission is granted.');
return true;
} else {
print('Storage permission is not granted.');
return false;
}
}

두번째 버튼을 클릭하면 권한을 요청하는 기능의 함수이다.

class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
// ...
body: Center(
child: Column(
children: <Widget>[
Text('Storage permission : ' + (_storagePermission?'OK':'None')),
RaisedButton(
child: Text('Check Storage Permission'),
onPressed: () async {
var result = await _checkPermission();
setState(() {
_storagePermission = result;
});
},
),
RaisedButton(
child: Text('Request Storage permission'),
onPressed: () async {
if (!_storagePermission) {
var result = await _requestPermission();
setState(() {
_storagePermission = result;
});
}
},
),
],
),
),
);
}
}

Android permission

Request App Permissions (Android developers)

android/app/src/main/AndroidManifest.xml

iOS permission

Requesting Permission (Apple Developer)

iOS App Permission Usage Description Keys (iOS Dev Recipes)

ios/Runner/info.plist

'Flutter' 카테고리의 다른 글

Flutter : path_provider  (0) 2019.11.11
Flutter : sqflite package (SQLite plugin)  (1) 2019.11.08
Flutter : DataTable  (3) 2019.11.04
Flutter : Draggable  (0) 2019.10.28
Flutter : SelectableText  (0) 2019.10.21
Comments