flutter 매번 각각에 fontfamily를 지정해야 설정한 폰트를 사용하나요?

flutter pubspec.yaml 안에 폰트관련 내용을 설정

  fonts:
    - family: LineSeedJP # 앱 전체에서 사용할 폰트 이름
      fonts:
        - asset: assets/fonts/LINESeedJP_A_TTF_Rg.ttf
        - asset: assets/fonts/LINESeedJP_A_TTF_Bd.ttf
          weight: 700
    - family: LineSeedKR # 앱 전체에서 사용할 폰트 이름
      fonts:
        - asset: assets/fonts/LINESeedKR_A_TTF_Rg.ttf
        - asset: assets/fonts/LINESeedKR_A_TTF_Bd.ttf
          weight: 700

매번 각각 지정할 필요가 없습니다.

MaterialApp의 theme 속성에서 **기본 폰트(fontFamily)**와 **대체 폰트(fontFamilyFallback)**를 한 번만 설정하면 됩니다.

❓ 현재 방식의 문제점

만약 MaterialApp의 테마에 fontFamily: 'LineSeedJP'라고만 설정하면, 앱의 모든 텍스트가 우선 일본어 폰트로 렌더링됩니다.

이때 "설정"과 같은 한국어LineSeedJP 폰트에 글자가 없으므로, 대체 폰트 목록LineSeedKR이 지정되어 있지 않다면 깨지거나 원하지 않는 시스템 기본 폰트로 보이게 됩니다.

theme: ThemeData(
        // 1. 기본 폰트를 일본어 폰트로 지정
        fontFamily: 'LineSeedJP',
        
        // 2. TextTheme의 apply 메서드를 사용해 '대체 폰트' 지정
        textTheme: const TextTheme().apply(
          // 3. LineSeedJP에 없는 글자(예: 한글)가 나오면
          //    이 리스트의 폰트에서 글자를 찾아 렌더링함
          fontFamilyFallback: ['LineSeedKR'], 
        ),

👨‍🏫 이렇게 설정하면?

  1. Text('日本語') -> LineSeedJP 폰트에 글자가 있으므로 **LineSeedJP**로 렌더링됩니다.
  2. Text('설정') -> LineSeedJP 폰트에 글자가 없습니다. -> fontFamilyFallback 목록에서 LineSeedKR를 확인합니다. -> 글자가 있으므로 **LineSeedKR**로 렌더링됩니다.
  3. Text('Hello') -> LineSeedJP 폰트에 글자가 있으므로 **LineSeedJP**로 렌더링됩니다.

결과적으로, Text 위젯에서 fontFamily를 매번 지정하지 않아도 자동으로 해당 언어에 맞는 폰트가 적용됩니다.