본문 바로가기
Flutter

FutureBuilder를 사용하여 배경 이미지를 설정하는 방법 [flutter]

by 난타코다옹 2023. 11. 9.

목차

    아래 코드는 배경 이미지를 설정하는 코드에요. 이 코드에서는 FutureBuilder를 사용해서 비동기로 이미지 파일을 가져오고, 그 파일을 BoxDecoration으로 설정하여 배경 이미지로 사용하고 있어요.

    에러 발생 코드

    Container(
      decoration: BoxDecoration(
        image: DecorationImage(
          fit: BoxFit.cover,
          image: FileImage(widget.lightAnimation.imageFile),
        ),
      ),
    )

    문제는 FileImage와 BoxDecoration이 Widget이 아니라는 것이에요. 그런데 제가 이해한 바로는 Container의 자식 위젯이 많은 변수와 함수로 구성되어 있어서 Container를 사용할 수 없다고 하셨네요.

    대신에 다음과 같이 FutureBuilder를 사용하여 해결할 수 있어요.

    FutureBuilder(
      future: getImageFile(),
      builder: (context, snapshot) => Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            fit: BoxFit.cover,
            image: FileImage(snapshot.data),
          ),
        ),
      ),
    )

    하지만 이렇게 하면 Container의 자식 위젯들도 FutureBuilder 안으로 옮겨와야 하기 때문에 원치 않는 결과가 될 수 있어요.

    그렇다면 FutureBuilder 대신에 Widget이 아닌 다른 대안이 있을까요? 아니면 배경 이미지를 설정하는 다른 방법이 있을까요?

    한 가지 대안은 다음과 같아요. Container 대신에 Image 위젯을 사용하고, ImageProvider를 직접 생성해서 사용하는 것이에요.

    Image(
      fit: BoxFit.cover,
      image: FileImage(await getImageFile()),
    )

    이 방법을 사용하면 FutureBuilder를 사용하지 않고도 배경 이미지를 설정할 수 있어요. 하지만 이 방법은 이미지 파일을 가져오는 과정에서 UI가 멈추게 될 수 있으니 주의해야 해요.

    마지막으로, 배경 이미지를 설정하는 다른 방법이 있는지 알려드릴게요. Flutter에서는 CachedNetworkImage와 같은 이미지 캐싱 라이브러리를 사용할 수도 있어요. 이 라이브러리를 사용하면 비동기로 이미지를 가져오고, 캐싱하여 효율적으로 사용할 수 있어요.