다크 모드 대응하기 — 눈에 편안한 뉴스 보기

2025. 5. 27. 16:59·Flutter/Flutter 뉴스 앱 만들기
728x90
반응형

밤이 되면 자동으로 앱이 어두워지고, 눈의 피로를 덜어주는 다크 모드는 이제 필수 기능이다.
Flutter에서는 이 다크 모드를 비교적 쉽게 적용할 수 있다. 단, 제대로 설계하지 않으면 디자인이 망가질 수도 있다.

이번 글에서는 ThemeMode 설정부터 커스텀 다크 테마 구성까지 뉴스 앱에 다크 모드를 적용하는 전체 흐름을 정리한다.


🌓 ThemeMode란?

Flutter의 MaterialApp에는 theme, darkTheme, themeMode라는 세 가지 설정이 있다.

MaterialApp(
  theme: lightTheme,
  darkTheme: darkTheme,
  themeMode: ThemeMode.system, // 또는 .dark / .light
)
  • ThemeMode.system: 디바이스 설정에 따라 자동 전환
  • ThemeMode.light: 항상 라이트 모드
  • ThemeMode.dark: 항상 다크 모드

앱 사용자에게 직접 테마 선택 UI를 제공하려면 themeMode를 상태로 관리해야 한다.


🎨 커스텀 다크 테마 구성

✅ 라이트 테마 예시

final lightTheme = ThemeData(
  brightness: Brightness.light,
  primarySwatch: Colors.indigo,
  scaffoldBackgroundColor: Colors.white,
  textTheme: GoogleFonts.notoSansTextTheme(),
);

✅ 다크 테마 예시

final darkTheme = ThemeData(
  brightness: Brightness.dark,
  scaffoldBackgroundColor: Color(0xFF121212),
  cardColor: Color(0xFF1E1E1E),
  textTheme: GoogleFonts.notoSansTextTheme(ThemeData.dark().textTheme),
);

단순히 brightness만 다르게 하는 게 아니라,
배경색, 카드색, 텍스트 컬러까지 직접 지정하는 것이 포인트다.


🧠 다크 모드 대응 팁

  • Color → Theme.of(context) 로 대체: 하드코딩 X
  • TextStyle → Theme.of(context).textTheme 활용
  • 카드, 배경 등은 ThemeData에서 관리
Container(
  color: Theme.of(context).scaffoldBackgroundColor,
  child: Text(
    news.title,
    style: Theme.of(context).textTheme.titleLarge,
  ),
)

디자인을 일관되게 유지하려면, 위젯마다 색상을 지정하기보단 ThemeData에 위임하는 방식이 좋다.


🧩 사용자가 직접 테마 변경하게 하기

class ThemeNotifier with ChangeNotifier {
  ThemeMode _mode = ThemeMode.system;
  ThemeMode get mode => _mode;

  void toggle() {
    _mode = _mode == ThemeMode.dark ? ThemeMode.light : ThemeMode.dark;
    notifyListeners();
  }
}

Provider와 연동하면 간단하게 다크 모드 토글 UI도 만들 수 있다.


🧘 마무리하며

눈에 편한 앱은, 오래 머물게 한다.
디자인 감성만큼이나 실용적인 다크 모드는 Flutter에서도 쉽게 구현 가능하다.

밤이 찾아오면, 앱도 조용히 어두워지는 경험
그게 진짜 사용자를 생각한 디자인이다.

✍️ 이 글은 터미널 밖으로 나온 개발자의 Flutter 뉴스 앱 만들기 여정입니다.

728x90
반응형

'Flutter > Flutter 뉴스 앱 만들기' 카테고리의 다른 글

Firebase로 푸시 알림 추가 — 속보 알림으로 더 빠른 뉴스 경험  (0) 2025.05.27
오프라인 모드 구현 — 캐시 저장을 활용한 네트워크 없는 상황 대응  (4) 2025.05.27
좋아요 및 북마크 기능 추가 — 내가 좋아한 뉴스 저장하기  (0) 2025.05.27
카테고리 탭 만들기 — 정치, 경제, 스포츠를 손쉽게 구분하기  (0) 2025.05.27
뉴스 상세 페이지 — 이미지, 본문, 공유 버튼까지 세련되게  (0) 2025.05.27
'Flutter/Flutter 뉴스 앱 만들기' 카테고리의 다른 글
  • Firebase로 푸시 알림 추가 — 속보 알림으로 더 빠른 뉴스 경험
  • 오프라인 모드 구현 — 캐시 저장을 활용한 네트워크 없는 상황 대응
  • 좋아요 및 북마크 기능 추가 — 내가 좋아한 뉴스 저장하기
  • 카테고리 탭 만들기 — 정치, 경제, 스포츠를 손쉽게 구분하기
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    flutter기초
    flutterui
    fluttertips
    rails보안
    정적사이트
    뉴스앱
    ActiveRecord
    flutter개발
    UI디자인
    UIUX
    코드를걷는사람
    북마크기능
    다크모드
    RubyOnRails
    flutter게시판
    개발블로그
    Firebase
    백엔드개발
    캘린더앱
    감성앱
    날씨앱
    모바일앱개발
    flutter디자인
    flutter앱개발
    flutter상태관리
    table_calendar
    Nextjs
    openweather
    Flutter
    메모앱
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
다크 모드 대응하기 — 눈에 편안한 뉴스 보기
상단으로

티스토리툴바