[Flutter] 이미지 로딩 최적화 – CachedNetworkImage 사용법

2025. 3. 25. 20:02·프로그래밍/Flutter

[Flutter] 이미지 로딩 최적화 – CachedNetworkImage 사용법

Flutter에서 Image.network()만 사용하면 이미지가 스크롤할 때마다 재요청되거나 깜빡거림(플리커링) 현상이 발생할 수 있습니다.

이럴 땐 CachedNetworkImage를 사용하면 이미지를 로컬에 캐싱해서 불필요한 재로딩을 줄일 수 있어 성능이 훨씬 좋아집니다.


✅ 1. CachedNetworkImage란?

cached_network_image는 이미지를 다운로드한 뒤 로컬에 캐싱해서 다음번에 같은 URL을 요청할 때 네트워크를 사용하지 않고 빠르게 표시해주는 라이브러리입니다.


✅ 2. 설치 방법


# pubspec.yaml
dependencies:
  cached_network_image: ^3.3.1

flutter pub get

→ 최신 버전은 pub.dev에서 확인하세요: https://pub.dev/packages/cached_network_image


✅ 3. 기본 사용법


import 'package:cached_network_image/cached_network_image.dart';

CachedNetworkImage(
  imageUrl: 'https://example.com/image.jpg',
  placeholder: (context, url) => CircularProgressIndicator(),
  errorWidget: (context, url, error) => Icon(Icons.error),
)
  • imageUrl: 불러올 이미지 주소
  • placeholder: 로딩 중 보여줄 위젯
  • errorWidget: 이미지 로드 실패 시 대체 위젯

✅ 4. BoxFit, height, width 등 커스텀 속성


CachedNetworkImage(
  imageUrl: 'https://example.com/profile.jpg',
  width: 120,
  height: 120,
  fit: BoxFit.cover,
  placeholder: (context, url) => Container(
    width: 120,
    height: 120,
    color: Colors.grey[200],
  ),
)

→ BoxFit.cover와 함께 사용하면 프로필 사진, 썸네일 등에 딱 맞게 표시할 수 있습니다.


✅ 5. ListView에서 사용 시 성능 이점


ListView.builder(
  itemCount: 10,
  itemBuilder: (context, index) {
    return ListTile(
      leading: CachedNetworkImage(
        imageUrl: 'https://picsum.photos/100?image=$index',
        width: 60,
        height: 60,
        fit: BoxFit.cover,
        placeholder: (context, url) => CircularProgressIndicator(),
        errorWidget: (context, url, error) => Icon(Icons.error),
      ),
      title: Text('Item $index'),
    );
  },
)

→ 일반 Image.network는 스크롤할 때마다 재요청하지만, CachedNetworkImage는 한 번 로딩된 이미지를 캐시에서 재사용합니다.


🧠 실무 팁

  • GIF도 지원하지만 크기 제한이 있으니 주의
  • 캐시 만료/초기화는 DefaultCacheManager().emptyCache() 등으로 가능
  • shimmer 효과나 skeleton UI와 함께 쓰면 UX 향상

📌 마무리

Flutter 앱의 이미지 성능을 높이고 싶다면 CachedNetworkImage는 거의 필수적인 도구입니다.

로딩 시간 단축, UX 향상, 데이터 절약까지 가능하니 ListView, GridView, 프로필 화면 등에 적극 활용해보세요 😊

도움이 되셨다면 공감 / 댓글 부탁드립니다!

반응형
저작자표시 비영리 (새창열림)

'프로그래밍 > Flutter' 카테고리의 다른 글

[Flutter] CachedNetworkImage 캐시 초기화 / 수동 리프레시 방법  (0) 2025.03.25
[Flutter] 상태관리 뭐 써야 할까? Provider vs Riverpod vs BLoC 비교  (0) 2025.03.25
[Flutter] Building with plugins requires symlink support  (0) 2024.07.02
Android Studio AVD GL error 0x502  (2) 2024.06.07
'프로그래밍/Flutter' 카테고리의 다른 글
  • [Flutter] CachedNetworkImage 캐시 초기화 / 수동 리프레시 방법
  • [Flutter] 상태관리 뭐 써야 할까? Provider vs Riverpod vs BLoC 비교
  • [Flutter] Building with plugins requires symlink support
  • Android Studio AVD GL error 0x502
큐레이트
큐레이트
저의 일상을 기록하는 블로그입니다.
  • 큐레이트
    큐레이트의 기록
    큐레이트
  • 전체
    오늘
    어제
    • 분류 전체보기 (186)
      • 국내여행 (37)
        • 애견여행 (33)
        • 맛집여행 (2)
      • 프로그래밍 (81)
        • C# (24)
        • Python (23)
        • Flutter (5)
        • .NET (4)
        • ASP (7)
        • Html (5)
        • Tomcat (2)
        • typescript (3)
        • etc (8)
      • 일상생활 (68)
        • 다이어트일지 (67)
        • 기타 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 복이랑스마트스토어
    • 복이랑블로그
  • 공지사항

    • 블로그 소개
  • 인기 글

  • 태그

    FastAPI
    Flutter
    파이썬
    운동일지
    pt
    C#
    체중기록
    티스토리챌린지
    국내여행
    제주도애견동반여행
    애견여행
    자동매매
    iis
    입력폼
    제주도
    식단
    제주도 애견동반
    오운완
    다이어트일지
    DevExpress
    Python
    HTML
    코인자동매매
    일상생활
    다이어트 일지
    애견동반여행
    오블완
    식단관리
    애견동반
    다이어트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
큐레이트
[Flutter] 이미지 로딩 최적화 – CachedNetworkImage 사용법
상단으로

티스토리툴바