line_change_text 1.0.1
line_change_text: ^1.0.1 copied to clipboard
A Flutter widget that provides precise line breaking control based on specific delimiters while respecting width constraints.
Line Change Text #
Flutter에서 정밀한 줄바꿈 제어가 필요한 상황을 위한 스마트 텍스트 위젯입니다. 특정 구분자를 기준으로 텍스트를 분할하면서도 지정된 너비 내에서 최적의 줄바꿈을 자동으로 계산합니다.
문제 상황 #
Flutter의 기본 Text 위젯은 자동 줄바꿈을 제공하지만, 때로는 우리가 원하지 않는 곳에서 줄이 바뀔 수 있습니다:
// 기본 Text 위젯의 예상치 못한 줄바꿈
Text(
'새로운 메시지가 도착했습니다. 지금 확인해보세요!',
style: TextStyle(fontSize: 14),
)
// 결과: "새로운 메시지가 도착했습니다. 지금 확인해보
// 세요!"
이런 상황에서 "확인해보세요"가 두 줄로 나뉘는 것은 가독성을 해치고 사용자 경험을 저하시킵니다.
해결책 #
LinechangeText 위젯은 실제 텍스트 렌더링 엔진과 동일한 정밀도로 텍스트 너비를 계산하여,
개발자가 지정한 구분자(보통 공백)에서만 줄바꿈이 일어나도록 보장합니다:
LinechangeText(
totalwidth: 250.0,
text: '새로운 메시지가 도착했습니다. 지금 확인해보세요!',
lineChangeText: ' ',
maxLines: 3,
textStyle: TextStyle(fontSize: 14),
)
// 결과: "새로운 메시지가 도착했습니다.
// 지금 확인해보세요!"
주요 특징 #
정밀한 너비 계산: Flutter의 TextPainter를 직접 활용하여 실제 렌더링과 동일한 정확도로 텍스트 너비를 계산합니다.
유연한 구분자 지원: 공백뿐만 아니라 쉼표, 점, 하이픈 등 어떤 문자든 구분자로 사용할 수 있습니다.
기존 Text 속성 호환: maxLines, overflow, textAlign 등 기본 Text 위젯의 모든 속성을 그대로 지원합니다.
다국어 최적화: 한국어, 중국어, 일본어 등 문자마다 너비가 다른 언어에서도 정확한 계산을 제공합니다.
설치 #
pubspec.yaml 파일에 다음을 추가하세요:
dependencies:
line_change_text: ^1.0.0
그 다음 패키지를 가져오세요:
flutter pub get
기본 사용법 #
import 'package:line_change_text/line_change_text.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return LinechangeText(
totalwidth: 250.0,
text: '안녕하세요! 오늘 하루는 어떠셨나요? 좋은 하루 되세요!',
lineChangeText: ' ',
maxLines: 2,
textStyle: TextStyle(
fontSize: 16.0,
color: Colors.black,
),
);
}
}
고급 사용 예시 #
쉼표를 구분자로 사용하기 #
LinechangeText(
totalwidth: 180.0,
text: '사과, 바나나, 오렌지, 포도, 딸기, 키위',
lineChangeText: ',',
maxLines: 3,
textStyle: TextStyle(fontSize: 14.0),
)
카드 레이아웃에서 제목 정리하기 #
Card(
child: Container(
width: 200,
padding: EdgeInsets.all(16),
child: Column(
children: [
LinechangeText(
totalwidth: 168.0, // 패딩을 고려한 실제 너비
text: '오늘의 할 일을 모두 완료했습니다! 수고하셨어요.',
lineChangeText: ' ',
maxLines: 2,
textStyle: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
// ... 다른 내용
],
),
),
)
반응형 디자인에서 활용하기 #
LayoutBuilder(
builder: (context, constraints) {
return LinechangeText(
totalwidth: constraints.maxWidth * 0.8,
text: '이 텍스트는 화면 크기에 따라 자동으로 조절됩니다.',
lineChangeText: ' ',
maxLines: 3,
textStyle: TextStyle(fontSize: 16.0),
);
},
)
매개변수 설명 #
| 매개변수 | 타입 | 필수 | 설명 |
|---|---|---|---|
totalwidth |
double |
✅ | 텍스트가 배치될 전체 너비 |
text |
String |
✅ | 표시할 텍스트 내용 |
lineChangeText |
String |
✅ | 줄바꿈 기준이 되는 구분자 |
maxLines |
int |
✅ | 최대 줄 수 |
textStyle |
TextStyle |
✅ | 텍스트 스타일 |
성능 고려사항 #
LinechangeText는 정밀한 너비 계산을 위해 TextPainter를 사용합니다. 대부분의 실제 사용 사례에서는 성능에 큰 영향을 주지 않지만, 매우 긴 텍스트를 자주 처리해야 하는 경우 다음을 고려해보세요:
위젯 트리 최적화: 텍스트가 자주 변경되지 않는다면 const 생성자를 사용하여 불필요한 재빌드를 방지할 수 있습니다.
텍스트 길이 제한: 극도로 긴 텍스트보다는 적절한 길이로 나누어 사용하는 것이 좋습니다.
라이선스 #
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.