본문 바로가기

Flutter

Flutter - 사진 업로드 비동기 처리

728x90

문제 :

FireStorage에 사진을 업로드하고 그 사진을 firebase에 업로드하고 싶었는데

사진 업로드가 시간이 걸려서 AddPage에서 ListPage로 넘어가는 체감 시간이 너무 길었다.

 

과정 : 

비동기식으로 파일업로드가 되어야 그 밑에 코드가 실행이 됐었는데

화면을 닫는 코드만 await 위에 작성했다.

  Future uploadFile() async {
    StorageReference storageReference = FirebaseStorage.instance
        .ref()
        .child('upload/${path.basename(_image.path)}');
    StorageUploadTask uploadTask = storageReference.putFile(_image);
    Navigator.pop(context);

    await uploadTask.onComplete;
    storageReference.getDownloadURL().then((fileURL) {

      _addTodo(Todo(
        _todoController.text,
        Timestamp.fromMillisecondsSinceEpoch(
            _selectedDate.millisecondsSinceEpoch),
        fileURL,
        used: Timestamp.fromMillisecondsSinceEpoch(
            DateTime.now().toLocal().millisecondsSinceEpoch),
      ));

      setState(() {
        _selectedDate = null;
        _uploadedFileURL = null;
        _image = null;
      });
    });
  }

 

결과 : 

일단 등록하기 버튼을 누르면 AddPage를 벗어나 ListPage를 빠르게 보여주고

사진이 업로드되어 firebase에 추가되는대로 리스트에서 다시 보여준다.

 

하지만 사용자 입장에서 바로 추가가 안됐나? 싶을 수 있기 때문에 더 생각해봐야겠다.