2025-10-14

Flutter ํ…Œ๋งˆ ์ ์šฉํ•˜๊ธฐ

ํ…Œ๋งˆ๋ž€?

์˜ค๋Š˜์€ Flutter์—์„œ ์ „์—ญ ํ…Œ๋งˆ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ๋‹ค.
๊ฐ ์œ„์ ฏ๋งˆ๋‹ค ์†์„ฑ์„ ์ง€์ •ํ•ด์„œ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์•ฑ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ„์ ฏ๋งˆ๋‹ค ์Šคํƒ€์ผ์„ ์ผ์ผ์ด ์ฃผ๋Š” ๋ฐฉ์‹์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ํŠนํžˆ ๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ๋Š” ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.
์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ThemeData ํด๋ž˜์Šค๋‹ค.

์ ์šฉ ๋ฐฉ๋ฒ•

MaterialApp์˜ theme์™€ darkTheme ์†์„ฑ์— ThemeData ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์•ฑ ์ „์ฒด์˜ ์‹œ๊ฐ์  ์š”์†Œ๋ฅผ ํ†ต์ผํ•  ์ˆ˜ ์žˆ๋‹ค.
ThemeData๋ฅผ ํ†ตํ•ด ์ƒ‰์ƒ, ํฐํŠธ, ์œ„์ ฏ ์Šคํƒ€์ผ ๋“ฑ์„ ํ•œ ๋ฒˆ์— ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

ThemeData ๊ตฌ์„ฑ ์˜ˆ์‹œ

  • useMaterial3: Material 3 ๋””์ž์ธ ์ ์šฉ ์—ฌ๋ถ€ ์„ค์ •
  • colorScheme: ColorScheme.fromSeed๋ฅผ ์‚ฌ์šฉํ•ด seedColor๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ „์ฒด ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑ
  • brightness: ๋ผ์ดํŠธ/๋‹คํฌ ํ…Œ๋งˆ ์—ฌ๋ถ€ ์ง€์ •
  • textTheme: TextStyle์„ ํ†ต์ผํ•˜์—ฌ ์•ฑ ์ „์—ญ์— ์ ์šฉ ๊ฐ€๋Šฅ
  • ElevatedButtonTheme, AppBarTheme, TextButtonTheme ๋“ฑ Flutter ๊ธฐ๋ณธ ์œ„์ ฏ์˜ ํ…Œ๋งˆ๋„ ์ง€์ • ๊ฐ€๋Šฅ

์˜ˆ์‹œ

ThemeData(
  useMaterial3: true,
  colorScheme: ColorScheme.fromSeed(
    seedColor: Colors.purple,
    brightness: Brightness.dark,
  ),
  textTheme: TextTheme(
    displayLarge: TextStyle(
      fontSize: 72,
      fontWeight: FontWeight.bold,
    ),
    titleLarge: GoogleFonts.oswald(
      fontSize: 30,
      fontStyle: FontStyle.italic,
    ),
    bodyMedium: GoogleFonts.merriweather(),
    displaySmall: GoogleFonts.pacifico(),
  ),
)

์ ์šฉ

์ •์˜ํ•œ ThemeData๋ฅผ MaterialApp์— ์ ์šฉํ•œ๋‹ค.

MaterialApp(
  theme: lightThemeData,
  darkTheme: darkThemeData,
  home: MyHomePage(),
);



โ€”

ํšŒ๊ณ 

ย  ์•ž์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๊ธฐ๋ณธ ํ…Œ๋งˆ๋ฅผ ๋จผ์ € ์žก๊ณ  ๊ฐ€๋Š” ์Šต๊ด€์„ ๋“ค์ด๋Š” ๊ฒŒ ์ข‹๊ฒ ๋‹ค.

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: