firebase 에 정상적으로 image가 upload되어있고 image : NetworkImage(snap['imageUrl']) 를 했는데 코드에는 이상이 없는데 실행해서 보면
======== Exception caught by image resource service ================================================ The following ImageCodecException was thrown resolving an image codec: Failed to load network image. Image URL: https://firebasestorage.googleapis.com/v0/b/fir-example-9b685.appspot.com/o/profilePics%2Fafdfa?alt=media&token=1520201b-41e4-4be3-927a-37f2fe2b16c1 Trying to load an image from another domain? Find answers at: https://flutter.dev/docs/development/platform-integration/web-images
위와 같은 에러가 난다. strage이름이 profilePics이고 afdfa 로 올라가고 슬래시(/)가 퍼센트2F( %2F ) 로 되어있길래 경로가 잘못된건가 했는데 클릭해보면 해당 파일은 정상이다.
다음 명령어를 이용해 디버그모드로 실행해보면 정상이다. (웹으로 확인할 것이므로) flutter run -d chrome --web-renderer html 나중에 빌드는 flutter build web --web-renderer html --release
Android Studio 에서는 상단에 Chrome(web)을 선택한 상태에서 main.dart 항목에 Edit Configuration을 클릭한 다음
Additional run args 에 --web-render html 을 추가한 다음 apply 또는 OK 버튼을 누르면 된다.
아무 설정도 안했기 때문에 주의 message와 함께 ssh key 생성여부를 물어본다 Warning: The private SSH key file for gcloud does not exist ... This tool needs to create the directory [.../.ssh] before being able to generate SSH keys Do you want to continue (Y/n)? 에서 Y로 진행한다.
Generating public/private rsa key pair. Enter passphrase : 비밀번호입력 Enter same passphrase again : 비밀번호입력
그러면 key정보 등이 있는 위치를 알려준다.
이때 cloud shell의 현재 region과 vm의 region이 다르면 Did you mean zone [asia-east1-a] for instance : [instance-1] (Y/n) 이 나온다 현재 설정된 region은 asia-ease1-a인데 instance-1 이 맞냐? 안맞는데 Y를 눌렀더니 No zone specified. Using zone [asia-northeast3-a] for instance: [instance-1] 이라고 친절하게 instance-1은 asia-northease3-a 를 쓰고 있어 라고 알려준다.
현재 작업하는 region을 바꾸거나 Did you mean zone [asia-east1-a] for instance : [instance-1] (Y/N) 이 나오면 n을 누른다
다시 password 설정을 한다 Enter passphrase for key ... : 비밀번호입력 Enter passphrase for key ... : 비밀번호입력
FlutterFire는 Flutter 와 Firebase 를 연동하는 플러그인(?)이라고 보면되는데
firebase에 있는 cli 다운 및 세팅이 선행되어야 한다. - firebase에 계정이 당연히 있어야 하고 - flutter도 설치되어 있어야 한다.
윈도우는 설치파일다운바다 설치하고 mac의 경우 다음 명령어를 실행하면
curl -sL https://firebase.tools | bash
비밀번호를 물어보고 다운받은 뒤 성공이라고 뜬다.
firebase login 명령을 하면 Allow Firebase to collect CLI usage and error reporting information? 을 물어보는데 사용정보를 모으는데 동의하냐라는 것으로 Y/n 중 n을 해도 상관없다
그러면 브라우저가 열리면서 구글계정 로그인을 하고 firebase설정 동의를 하면 성공이다.
그 뒤에 프롬프트 창에 그냥 아래 내용을 입력한다. dart pub global activate flutterfire_cli 그러면 flutterfire 가 활성(activated)되었다는 메세지가 나온다. 안나오면 설치를 다시...
그래서 flutterfire 를 쳐 봤더니... command not found: flutterfire 라고 나온다... 위에 메세지에서 보듯이 path가 맞지 않는다고... 그래서 export PATH="$PATH":"$HOME/.pub-cache/bin" 를 한 뒤에 flutterfire를 하면 FlutterAppRequiredException: The current directory does not appear to be a Flutter application project
그렇다... 현재 디렉토리는 flutter project와는 상관없는 위치다. ㅋㅋ flutter 프로젝트를 생성한 뒤에 거기에서 "flutterfire"를 실행해야한다.
그런데, 샘플 프로젝트에 가서 flutterfire를 했더니 flutterfire: line 8: dart: command not found라고 하네...
dart도 설치 brew tap dart-lang/dart brew install dart
그래서 dart 설치도 마쳤다.( dart만 실행시켰을 때 어쩌고 저쩌고 내용이 나오면 됨. 안나오면 문제있는것으로 경로문제일 듯.)
다시 flutterfire를 프로젝트에서 쳐 봤다니 ㅎㅎㅎ 어쩌고 저쩌고가 나온다. 이제는 제대로 된 명령어로 flutterfire configure 하니까 검색을 쫘~악 하더니 1개를 찾았다.
새로만들것인가 있는 것을 쓸 것인가. 위 아래 버튼으로 고르면 되는데 (새로 만들자 ㅎㅎㅎ)
그런데.... 분명히 없는 프로젝트 이름을 했는데...있다고 나오네?
그래서 아무이름을 했더니... 진행된다 ㅡㅡ. 뭐징? 먼저 platforms. 기본으로 android, ios가 체크되어 있다. 방향키를 내려 web에 놓고 스페이스바로 체크 엔터를 치자 firebase(파이어베이스의 프로젝트)에 현재 만드는 어플이 사용등록 안되어 있다고 bundle id(=package이름)을 넣으라고 한다.
com.nobang.flutterfire라고 입력하자 ios에 등록, android에 등록했다고 한다. 그러면서 접속관련 키정보는 lib 폴더 아래에 firebase_options.dart 라는 파일에 저장되어 있다.
사용은
lib/firebase_options.dart 파일을 import하고 main.dart에서는 같은 경로에 있으니까 import 'firebase_options.dart'; //또는 import 'package:프로젝트명/firebase_options.dart'
init해서 사용 await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );
현재 flutterfire version 확인 : flutterfire --version 0.1.1+2 로 나오네..
이유는 android sdk를 못잡아서 그렇다 ㅡㅡ; flutter는 android studio로 하는게 맘편하지만 일단 Intelli J 에다 설정하려면 android studio를 설치하고 그곳의 sdk경로를 intelliJ 에 set하는 방법이 있다 (물론 다른방법도 있겠지만 다른것은 못찾았다.)
mac의 경우 android studio를 실행하고 화면 좌측 상단에서 "Android Studio" > Prefrences를 누르면 Appearance & Behavior > System Settings > Android SDK 가 있다. 여기에서 Android SDK Location 위치를 복사한다.
이제 Intelli J를 실행하고 화면 좌측 상단에서 "Intelli J IDEA" > Preferences를 누르면 Android Studio와 위치가 좀 다르다 Build, Execution, Deployment > Android > Android Project Structure에서 SDK Location 이 비어있을 것이다. (비어있지 않고 sdk경로가 있다면 문제가 없겠지만 ㅎㅎ) 위에서 복사한 Android SDK Location을 붙여넣고 Apply를 하면 된다.
이렇게 하면 flutter Cannot resolve symbol 'Properties' 오류는 잡힌다.
만약 GradleException 오류가 나고 있다면 해당 app/build.gradle 파일에서 오류나는 GradleException을 FileNotFoundException 으로 변경한다 API29부터 바뀌었다고 한다.