•
file을 써야한다면 import 'dart:io'를 이용한다. 이를 통해 file과 file system 이용 가능하다.
•
Button을 스크린 가장 밑단에 붕 뜬 느낌 없이 주고 싶다면 elevation을 0으로 주고, margin을 없애야 하므로 materialTapTargetSize를 MaterialTapTargetSize.shrinkWrap으로 준다.
•
Device에서 image를 사용하고 싶다면 Image.file을 이용한다.
•
Flutter는 Dart 언어를 쓰고 언어 특성상 Engine을 갖고 있는데, 이로 인해 내가 쓰고 있는 운영체제의 시스템에 diirect한 접근이 가능하다. 따라서 Device 기능을 가져다 쓸 수 있다. 하지만 가장 중요한 것은 이런 Device기능을 가져다 쓸 때는 Permission을 얻어야 한다는 것이다. 따라서 official docs를 보며 추가 작업이 필요함 (반드시!)
•
Android는 android >> app >> src >> main >>AndroidManifest.xml && android >> gradle.properties (여기서 에러가 있다면 build.gradle도 설정한다.)
•
iOS는 Runner >> Base.lproj >> Info.plist && Runner >> Base.lproj >> AppDelegate.swift
•
image_picker를 통해서 갤러리, 카메라 기능을 쉽게 쓸 수 있다.
•
SQLite라는 DB를 사용하기 위해서 sqlite package가 필요하다.
•
DB처리는 Helper을 만들어서 DB접근할 수 있게 Method 정의 필요하다. (Path를 통해 접근한다.)
•
Location을 처리하고 싶다면 location package를 이용한다.
•
Location을 직접 조정하고 싶다면 location package와 연결할 수 있는 google_maps_flutter package를 이용한다. (google map은 부모 Widget의 height, width를 추정한다.)
•
구글은 좌표를 던지면 주소를 주는 API도 있다. Geocoding API이용하면 된다.
•
constructor에 []를 쓰는 것은 값이 없을 때, 주어진 값을 초기 값으로 할당 하겠다는 의미이다.
•
push pop을 통해 return하는 것에 대해서 Dart는 이 부분만큼은 쉽게 Type을 추정하지 못한다. 따라서 변수 타입에 데이터 타입을 정하거나 push 타입을 지정하는 것이 옳다.
•
사진을 local storage에 저장하기 위해서는 <imgFile>.copy() Method를 이용한다.
•
android나 ios 둘 플랫폼에서 아무 위치에 저장할 수는 없다.
•
저장할 수 있는 위치를 구하기 위해 path_provider가 필요하다.
•
또한 path를 생성할 수 있는 path 패키지도 필요하다.
•
path로 들어가는 인자를 구하기 위해서 여러 function들이 있지만 대체로 getApplicationDocumentsDirectory()를 쓴다.
•
getExternalStorageDirectory()는 android 전용이다.
•
getTemporaryDirectory()는 운영체제에 의해 일정 시간이 지나면 clean된다.
•
path.basename()을 통해 separator로 부터 쉽게 파일 이름을 구할 수 있다.
•
Location().getLocation()은 사용자의 위치를 받아오는 함수이다. (위치 받은 좌표를 처리해야 한다.)
•
location 및 sqlite db 관련 코드 확인하자.
◦
google maps static api
◦
location url에서 center은 lat, long의 주소를 의미한다.
◦
zoom은 zoom / size는 size / maptype은 maptype
◦
marker추가는 여러 개 생성 가능하다.