티스토리 뷰

모바일 앱에서 이미지 표시 기능은 매우 중요하며, 특히 외부 URL을 통해 이미지를 로드하는 경우가 많습니다. Flutter에서는 Image.network 위젯을 사용하여 간편하게 인터넷 이미지를 불러올 수 있습니다. 이번 글에서는 Image.network의 기본 사용법부터 다양한 활용 방법까지 다뤄보겠습니다.

참고. Display images from the internet

네트워크 이미지 로딩이란?

네트워크 이미지는 앱 내부의 정적 자산이 아닌 외부 URL에서 이미지를 불러오는 방식입니다. 이 기능은 주로 상품 이미지, 뉴스 배너, 소셜 미디어 콘텐츠 등을 표시할 때 유용합니다. Flutter에서는 Image.network 생성자를 통해 이러한 네트워크 이미지를 간편하게 화면에 표시할 수 있습니다.

기본 사용법: Image.network

Flutter에서 네트워크 이미지를 로드하기 위해 Image.network 위젯을 사용합니다. 아래는 기본적인 예제 코드입니다.

Image.network('https://picsum.photos/250?image=9'),

이 코드는 지정된 URL에서 이미지를 불러와 화면에 표시합니다. URL을 통해 불러온 이미지는 앱이 구동 중일 때 실시간으로 로드되므로, 사용자의 네트워크 상태에 따라 로딩 시간이 다를 수 있습니다.

Image.network의 고급 기능

1. 애니메이션 GIF 지원

Image.network는 애니메이션 GIF 파일도 지원합니다. 따라서 간단한 애니메이션을 추가하고자 할 때 매우 유용합니다.

Image.network('https://docs.flutter.dev/assets/images/dash/dash-fainting.gif'),

이 코드를 사용하면 GIF 이미지가 자동으로 재생됩니다. 이 기능을 통해 앱의 시각적 요소를 더욱 풍부하게 만들 수 있습니다.

2. 로딩 중 Placeholder 이미지 사용

네트워크 상태가 좋지 않거나 이미지 파일이 크면 로딩 시간이 길어질 수 있습니다. 이를 대비하여 이미지를 로딩하는 동안 Placeholder 이미지를 표시해 사용자에게 피드백을 줄 수 있습니다. Flutter는 기본 Image.network 생성자에서 로딩 애니메이션을 직접 지원하지 않지만, FadeInImage 위젯을 활용하면 로딩 중 Placeholder를 지정할 수 있습니다.

FadeInImage.assetNetwork(
  placeholder: 'assets/loading.gif',
  image: 'https://picsum.photos/250?image=9',
)

이 예제에서는 loading.gif라는 로컬 이미지를 로딩 중에 표시하고, 원본 이미지가 로드되면 자연스럽게 대체됩니다.

다양한 네트워크 이미지 사용 사례

  1. 프로필 사진 업데이트: 사용자의 프로필 사진 URL을 Image.network로 불러오면 앱이 업데이트될 때마다 프로필이 즉시 반영됩니다.
  2. 상품 카탈로그: 이커머스 앱에서는 Image.network를 사용해 상품 이미지를 실시간으로 불러올 수 있습니다.
  3. 동적 배너: 광고 배너나 이벤트 이미지를 로컬 저장소에 저장하지 않고 URL에서 불러와 앱의 용량을 줄이고, 콘텐츠를 쉽게 관리할 수 있습니다.

로딩 최적화 팁

  1. 캐싱 사용: Flutter는 기본적으로 이미지 캐싱을 지원하지만, 더 효율적인 캐싱을 위해 cached_network_image 패키지를 사용하면 앱 성능이 더욱 개선될 수 있습니다.cached_network_image는 이미지가 한 번 로드되면 로컬 캐시에 저장하여 다시 로드할 때 빠르게 불러올 수 있도록 합니다. 이는 네트워크 트래픽을 줄이고 사용자 경험을 향상시키는 데 큰 도움이 됩니다.
  2. CachedNetworkImage( imageUrl: 'https://picsum.photos/250?image=9', placeholder: (context, url) => CircularProgressIndicator(), errorWidget: (context, url, error) => Icon(Icons.error), )
  3. 에러 핸들링: 네트워크 상태가 좋지 않거나 이미지 URL이 잘못되었을 경우, 에러 메시지 또는 기본 이미지를 표시해 사용자가 혼란스러워하지 않도록 처리할 수 있습니다.
  4. Image.network( 'https://picsum.photos/250?image=invalid', errorBuilder: (context, error, stackTrace) { return Text('이미지를 불러올 수 없습니다.'); }, )
  5. 저화질 이미지를 먼저 로드하고 고화질로 교체: 점진적 이미지 로딩을 위해 저해상도 이미지를 먼저 표시하고, 고해상도 이미지가 로드되면 교체하는 방식도 고려할 수 있습니다.

결론: Flutter에서 네트워크 이미지 사용하기

Flutter의 Image.network는 외부 URL에서 이미지를 간편하게 불러올 수 있는 강력한 도구입니다. 기본적인 이미지 로드 외에도 GIF 지원, Placeholder 사용, 에러 처리 등 다양한 기능을 제공하여 효율적인 이미지 로딩을 지원합니다. 이를 통해 앱의 비주얼 요소를 더욱 풍부하게 만들고, 사용자 경험을 극대화할 수 있습니다.

 

Flutter로 네트워크 이미지를 사용하는 것은 앱의 콘텐츠를 동적으로 관리하고, 실시간으로 업데이트할 수 있는 중요한 기능입니다. Image.network 위젯을 활용해 다양한 이미지 로딩 방식을 시도해 보세요.

 

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    var title = 'Web Images';

    return MaterialApp(
      title: title,
      home: Scaffold(
        appBar: AppBar(
          title: Text(title),
        ),
        body: Image.network('https://picsum.photos/250?image=9'),
      ),
    );
  }
}