프로젝트 최초 커밋
This commit is contained in:
53
lib/screens/common/custom_widgets/highlight_text.dart
Normal file
53
lib/screens/common/custom_widgets/highlight_text.dart
Normal file
@@ -0,0 +1,53 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
// 자동완성 드롭다운에서 텍스트 하이라이트를 위한 위젯
|
||||
class HighlightText extends StatelessWidget {
|
||||
// 전체 텍스트
|
||||
final String text;
|
||||
// 하이라이트할 부분
|
||||
final String highlight;
|
||||
// 하이라이트 색상
|
||||
final Color highlightColor;
|
||||
// 텍스트 스타일
|
||||
final TextStyle? style;
|
||||
|
||||
const HighlightText({
|
||||
Key? key,
|
||||
required this.text,
|
||||
required this.highlight,
|
||||
this.highlightColor = Colors.blue,
|
||||
this.style,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (highlight.isEmpty) {
|
||||
// 하이라이트가 없으면 전체 텍스트 반환
|
||||
return Text(text, style: style);
|
||||
}
|
||||
final String lowerText = text.toLowerCase();
|
||||
final String lowerHighlight = highlight.toLowerCase();
|
||||
final int start = lowerText.indexOf(lowerHighlight);
|
||||
if (start < 0) {
|
||||
// 일치하는 부분이 없으면 전체 텍스트 반환
|
||||
return Text(text, style: style);
|
||||
}
|
||||
final int end = start + highlight.length;
|
||||
return RichText(
|
||||
text: TextSpan(
|
||||
style: style ?? DefaultTextStyle.of(context).style,
|
||||
children: [
|
||||
if (start > 0) TextSpan(text: text.substring(0, start)),
|
||||
TextSpan(
|
||||
text: text.substring(start, end),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: highlightColor,
|
||||
),
|
||||
),
|
||||
if (end < text.length) TextSpan(text: text.substring(end)),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user