플러터 텍스트 위젯 Flutter Text Widget

2024. 12. 3. 12:58프론트/플러터

Text

Text 위젯은 문자열 데이터를 화면에 표시한다.

Text('Hello Flutter!');

 

HTML의 어트리뷰트 처럼 속성이 여러가지 있다.

 

1. data : 출력할 문자열이다. 위에서 Hello Flutter!라고 쓴 부분이다.

 

2. style : 텍스트의 스타일을 정의하는 TextStyle 객체 설정이다. 스타일에 대한 설명은 추후에..

Text(
  'Styled Text',
  style: TextStyle(		//style(키): TextStyle(..)(생성자)
    fontSize: 24,          // 글자 크기
    color: Colors.blue,    // 글자 색상
    fontWeight: FontWeight.bold, // 굵기
    fontStyle: FontStyle.italic, // 기울임꼴
    decoration: TextDecoration.underline, // 밑줄
  ),
);

 

2.1 style 세부사항 (주요 속성)

  1. fontSize : 글자 크기
  2. color : 글자 색상 (Colors.green, Color.fromRGBO(255, 0, 0, 1.0 등) 
  3. fontWeight : 글자 굵기 (FontWeight.bold, FontWeight.w100 등)
  4. fontStyle : 기울일건지 (FontStyle.italic)
  5. letterSpacing : 글자 간격
  6. wordSpacing : 단어 간격
  7. decoration : 텍스트 장식 (TextDecoration.underline 등)
  8. decorationColor : 장식의 색상
  9. decoration.Style : 장식 스타일 (TextDecorationStyle.dashed 등)

 

3. textAligin : 텍스트 정렬 방식을 설정한다.

- 기본 값 TextAligin.start

- 사용 가능한 값

  •  TextAligin.left : 왼쪽 정렬
  • TextAligin.right : 오른쪽 정렬
  • TextAligin.center : 가운데 정렬
  • TextAligin.justify : 양쪽 정렬

예제

Text(
    '가운데 텍스트',
    textAligin: TextAligin.center,
);

 

4. textDirection : 텍스트 방향을 설정한다.

기본 값 : 시스템 설정에 따른다.

사용 가능한 값 :

  • TextDirection.lrt : 왼쪽에서 오른쪽
  • TextDirection.rtl : 오른쪽에서 왼쪽

예제

Text(
  'RTL 텍스트',
  textDirection: TextDirection.rtl,
);

5. maxLines : 텍스트가 표시될 최대 줄 수 제한한다.

제한이 없으려면 null로 설정한다.

 

예제

Text(
  '이 텍스트는 매우 길고, 적절한 조치를 취하지 않으면 넘어가버릴 수도 있을 수도 있을 수도 있다.',
  maxLines: 2, // 최대 2줄로 제한
  overflow: TextOverflow.ellipsis, // 넘치는 부분은 "..."으로 표시
);

 

6. overflow : 텍스트가 영역을 초과할 때 동작을 정의한다.

사용 가능한 값 :

  • TextOverFlow.clip : 초과된 텍스트 자르기
  • TextOverFlow.fade : 초과된 텍스트 페이드 처리
  • TextOverFlow.ellipsis : 초과된 텍스트 ... 처리

예제

Text(
  '이 엄청나게 긴 텍스트는 영역을 초과하는 순간 잘리고 없어집니다........',
  overflow: TextOverflow.clip,
);

 

7. softWrap : 텍스트가 컨테이너의 경계를 넘어갈 때 줄바꿈 여부를 결정한다.

기본 값 : true

 

예제

Text(
  '이 기다란 텍스트는 경계를 넘어가면 줄이 바뀝니다..',
  softWrap: false, // 줄바꿈 비활성화
);

 

8. structStyle : 텍스트의 줄 높이를 명시적으로 설정한다.

예제

Text(
  '커스텀 줄 높이',
  strutStyle: StrutStyle(
    fontSize: 24,
    height: 1.5, // 줄 높이
  ),
);

 

9.textScaleFactor : 텍스트의 크기를 조정하는 배율을 설정한다.

기본값  : 시스템의 텍스트 배율

예제

Text(
  '배율 설정 텍스트',
  textScaleFactor: 1.5, // 텍스트 크기를 1.5배로 확대
);

 

10. locale : 언어 및 지역 설정을 지정한다.

기본 값 : 시스템 설정에 따른다.

예제

Text(
  'Localized Text',
  locale: Locale('ko', 'KR'), // 한국어 설정
);

 

RichText

Text위젯은 단순한 텍스트에 사용되고,  복잡한 스타일링이 필요한 경우 RichText 위젯을 사용한다.

RichText는 텍스트를 여러 스타일로 나눠 표시할 수 있는 고급 텍스트 위젯이다.

text 속성에 TextSpan 객체를 전달하여 스타일링 한다.

RichText(	//RichText
  text: TextSpan(	//text 속성에 TextSpan 객체 만들어서 전달
    text: '첫 번째 텍스트 ',
    style: TextStyle(fontSize: 20, color: Colors.black),	//전체 적용할 거
    children: <TextSpan>[	//TextSpan 배열
      TextSpan(
        text: '두 번째 텍스트',
        style: TextStyle(
          fontWeight: FontWeight.bold,
          color: Colors.blue,
        ),
      ),
      TextSpan(
        text: '세 번째 텍스트',
        style: TextStyle(color: Colors.red),
      ),
    ],
  ),
);

 

 

Text vs RichText 주요 차이점

특성 Text RichText
목적 단순 텍스트 표시 복잡한 텍스트 스타일링
스타일 적용 전체 텍스트에 하나의 스타일 적용 텍스트의 각 부분에 다른 스타일 적용 가능
주요 속성 style :  text : (TextSpan 객체)
사용 용도 간단한 텍스트 표시 (제목, 설명 등) 강조 텍스트, 다국어 텍스트, 다양한 스타일
구조 단일 레이어 계층 구조 (TextSpan 사용)
성능 더 간단하며 성능이 좋다 상대적으로 복잡한 작업이 많다.

 

 

종합하여 사용해보기

 

Text(
  '종합하여 사용하기',
  style: TextStyle(
    fontSize: 20,
    color: Colors.blue,
    fontWeight: FontWeight.bold,
    fontStyle: FontStyle.italic,
    letterSpacing: 2.0,
    wordSpacing: 4.0,
    decoration: TextDecoration.underline,
    decorationColor: Colors.red,
    decorationStyle: TextDecorationStyle.wavy,
    height: 1.5,
    fontFamily: 'Roboto',
    shadows: [
      Shadow(offset: Offset(2, 2), blurRadius: 4.0, color: Colors.grey),
    ],
    backgroundColor: Colors.yellow,
  ),
);