본문 바로가기

Flutter/00 Legacy

[Flutter] Uploading image to FirebaseStorage (async/await)

firebase에 이미지를 업로드하고 이미지 URL 받은후 cloud firestore에 기본 정보를 업로드하는 샘플.

 

/* 플러그인 정보 */

firebase_core: ^0.7.0
firebase_storage: ^7.0.0
cloud_firestore: ^0.16.0

Future _uploadImage() async {

  // 스토리지에 먼저 사진 업로드 하는 부분.
  final firebaseStorageRef = FirebaseStorage.instance; 
  
  TaskSnapshot task = await firebaseStorageRef
  .ref() // 시작점
  .child('post') // collection 이름
  .child(_picName) // 업로드한 파일의 최종이름, 본인이 원하는 이름.
  .putFile(_image); //실제 이미지파일, 버전 ^7.0.0 에서는 onComplete 필요없음
  /*.onComplete; // 버전 ^4.0.1 에 해당 사항*/
  
  if (task != null) {
    // 업로드 완료되면 데이터의 주소를 얻을수 있음, future object
    var downloadUrl = await task.ref.getDownloadURL();
    
    // post collection 만들고, 하위에 문서를 만든다
    var doc =
    FirebaseFirestore.instance.collection('post').doc(); 
    doc.set({
      'id': doc.id,
      'datetime' : DateTime.now().toString(),
      'displayName': widget.user.displayName,
      'userPhotoUrl': widget.user.photoURL,
    }).then((onValue) {
      //정보 인서트후, 상위페이지로 이동
      Navigator.pop(context);
    });
  }
}