
영상의 줄거리가 너무 길어 일부가 잘려 나오는 문제가 발생했다. 기본적으로 Text 위젯에서 maxLines와 overflow: TextOverflow.ellipsis 속성을 사용하면 최대 줄 수를 제한하고 초과하는 부분을 "..."으로 표시할 수 있다.
Text(
"이 텍스트가 아주 길어요. 엄청 길어서 감당 못할거에요. 자신 있어요?",
maxLines: 2, // 최대 2줄까지만 표시
overflow: TextOverflow.ellipsis, // 넘치는 부분은 "..." 처리
style: TextStyle(fontSize: 18),
)
그러나 위 방식만으로는 사용자가 전체 내용을 볼 수 없다는 단점이 있다. 따라서 다음과 같은 방식으로 해결할 수 있다.
여기서 중요한 점은 텍스트가 3줄을 초과하는지 여부를 판단해야 한다는 것이다. 이를 위해 TextPainter.didExceedMaxLines 속성을 활용하면 된다.
여기서 포인트는 텍스트 초과 여부를 알아야한다 어떻게 하면 체크를 할수있을까
텍스트 길이 초과 여부 체크 (TextPainter.didExceedMaxLines)을 활용해야 한다.
여부 체크 코드를 같이 보자
void _checkIfTextOverflows() {
final textPainter = TextPainter(
text: TextSpan(text: widget.text, style: TextStyle(fontSize: 16)),
maxLines: 3,
textDirection: TextDirection.ltr,
);
textPainter.layout(maxWidth: 300); // 최대 너비 설정
setState(() {
_isOverflowing = textPainter.didExceedMaxLines; // 텍스트 초과 여부 체크
});
}
TextSpan은 리치 텍스트(Rich Text) 를 표현하는 데 사용된다.
TextPainter는 Flutter에서 캔버스(Canvas)에 텍스트를 그리는 역할을 한다.
위 예시 코드에서 TextSpan을 사용한 굳이 이유는 TextPainter가 문자열(String)을 직접 받지 않고 TextSpan을 요구하기 때문이다!
✅ 텍스트 크기 계산 → size, width, height
✅ 줄바꿈 여부 확인 → didExceedMaxLines
✅ 줄별 정보 가져오기 → computeLineMetrics()
✅ 클릭한 위치의 문자 찾기 → getPositionForOffset()
✅ 커서 위치 계산 → getOffsetForCaret()