돌아오는 목요일이 초급 스터디 발표날입니다.
발표자료를 준비하면서 파일로 데이터를 저장하는 방법인 Path_Provider를 공부해보았습니다.
책에서 나온 사용방법으로는 도저히 이해가 안되어서 Path_Provider 관련 배경지식을 쌓을 겸
Flutter의 데이터가 안드로이드와 IOS에 각각 어떻게 저장 사용되는지 공부해보았습니다.
https://velog.io/@phs811/Flutter-저장소-폴더-구조
위 링크에 도움을 받았습니다.
앱의 저장소 이해하기
Path Provider를 통해서 안드로이드 IOS 사용 유무표가 아래에 있는데 이게 가장 중요한 부분이다.
위 사용 유무 표에 나와있는 관련 함수
아래의 함수들을 통해 일반적인 앱이 접근하여 사용하는 저장공간에 해당하는 파일 시스템상의 위치 정보를 얻을 수 있다.
getApplicationDocumentsDirectory()
- /data/user/0/패키지명/app_flutter
getApplicationSupportDirectory()
- /data/user/0/패키지명/files
여기까지 내부 저장소
getExternalCacheDirectories()
- '/storage/SDcard/Android/data/패키지명/cache'
getExternalStorageDirectories({StorageDirectory type })
- '/storage/SDcard/Android/data/패키지명/files'
getExternalStorageDirectory()
- /storage/emulated/0/Android/data/패키지명/files
여기까지 외부저장소
getTemporaryDirectory()
- '/data/user/0/패키지명/cache'
임시데이터 저장소
getApplication, getExternal차이점 = 사용자가 접근가능한 폴더에 접근 유무, 즉 앱 내의 저장소이냐. 앱 밖의 저장소이냐가 핵심
- 안드로이드
- Internal 내부
- 모든 안드로이드 기기에 포함되는 저장공간
- 앱 설치시 앱을 위해 별도의 공간이 만들어진다.
- 앱 삭제시 같이 삭제 된다.
- 데이터 저장경로 /data/user/0/패키지이름
- External (외부)
- 앱 삭제 여부와 상관없이 영구적으로 파일을 저장한다
- 사용하려면 manifest에서 권한을 받아야 한다.
manifest란?
manifest는 앱에 관한 필수정보를 설명하는 곳으로 다음과 같은 정보가 들어가 있다.
- 앱의 패키지 이름
- 앱의 구성요소
- 앱의 권한 요청
- 기기간의 호환 google play
Path prvoider에서는 3번 External 권한을 요청하면 된다.
// 저장공간 permission 허용
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
사용하는 예로는 특정한 어플을 깔았을 때 앱이 처음 실행될 때
“기기의 카메라, 갤러리, 파일에 대한 권한을 허락하시겠습니까??”
IOS
- IOS 저장소에 대해
모든 IOS어플은 Sandbox 과 DataCotnaier를 가지고 있다.
어플에 기록되는 모든 데이터들은 DataCotainer에 저장된다.
- Documents
- 유저가 생선한 파일, 다운로드 파일을 저장합니다. iCloud에 백업이 가능
import 'package:path_provider/path_provider.dart';
- Directory supportDirectory = await getApplicationDocumentsDirectory();
- Library
- 어플을 구동하기 위해 필요한 데이터, 예를 들어 어플을 사용하는 유저에 대한 정보, 앱 설정 데이터 , 유저에게 공개하기에는 민감한 데이터가 저장
import 'package:path_provider/path_provider.dart';
Directory supportDirectory = await getApplicationSupportDirectory();
- Temp
- 시간이 지나면 사라지는 임시 저장공간
import 'dart:io';
Directory tmpDirectory = Directory.systemTemp;
즉 Path_Provider로 데이터 저장소 접근 방식이 플랫폼에 따라 다르다.
안드로이드는 manifest를 통해 앱 외부 저장소의 권한을 얻어서 사용가능
IOS는 외부저장소는 사용불가, 내부 저장소만 사용가능
결론
Path_Provider로는 아래 함수 2가지만 사용하면 될 듯 하다.
getApplicationDocumentsDirectory() --> 유저가 제작한 데이터, 다운로드한 파일
- /data/user/0/패키지명/app_flutter
getApplicationSupportDirectory() --> 앱 설정이나, 유저정보, 유저가 보기에는 민감한 화면에 노출되지 않는 데이터 저장가능
- /data/user/0/패키지명/files
'Flutter-플러터 > 플러터 공부' 카테고리의 다른 글
플러터 폴드화면 대응 방법 flutter_screenutil 패키지 (0) | 2022.12.12 |
---|---|
플러터 숫자 천원단위 콤마 입히기 Format (0) | 2022.12.06 |
Flutter Getter and Setter (0) | 2022.12.05 |
[Navigator] Flutter (1) | 2022.12.03 |
카카오 API 받기 (0) | 2022.11.30 |