-
Notifications
You must be signed in to change notification settings - Fork 19
/
highlighting.dart
75 lines (73 loc) · 2.23 KB
/
highlighting.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import 'package:flutter/gestures.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'highlighting_core.dart';
/// Extension over [HighlightedString].
extension HighlightingExt on HighlightedString {
/// Converts [HighlightedString] to [TextSpan].
/// Applies [regularTextStyle] and [highlightedTextStyle] styles to
/// to non-highlighted and highlighted sub-spans accordingly.
///
/// ## Example
///
/// ```dart
/// Text.rich(
/// hit.getHighlightedString('title').toTextSpan(),
/// );
/// ```
TextSpan toTextSpan({
TextStyle? style,
TextStyle regularTextStyle = const TextStyle(fontWeight: FontWeight.normal),
TextStyle highlightedTextStyle =
const TextStyle(fontWeight: FontWeight.bold),
GestureRecognizer? recognizer,
MouseCursor? mouseCursor,
PointerEnterEventListener? onEnter,
PointerExitEventListener? onExit,
String? semanticsLabel,
Locale? locale,
bool? spellOut,
}) =>
TextSpan(
style: style,
children: toInlineSpans(
regularTextStyle: regularTextStyle,
highlightedTextStyle: highlightedTextStyle,
),
recognizer: recognizer,
mouseCursor: mouseCursor,
onEnter: onEnter,
onExit: onExit,
semanticsLabel: semanticsLabel,
locale: locale,
spellOut: spellOut,
);
/// Converts [HighlightedString] to list of [InlineSpan].
/// Applies [regularTextStyle] and [highlightedTextStyle] styles to
/// to non-highlighted and highlighted spans accordingly.
///
/// ## Example
///
/// ```dart
/// Text.rich(
/// TextSpan(
/// style: DefaultTextStyle.of(context).style,
/// children: hit.getHighlightedString('title').toInlineSpans(),
/// ),
/// );
/// ```
List<InlineSpan> toInlineSpans({
TextStyle regularTextStyle = const TextStyle(fontWeight: FontWeight.normal),
TextStyle highlightedTextStyle =
const TextStyle(fontWeight: FontWeight.bold),
}) =>
tokens
.map(
(token) => TextSpan(
text: token.content,
style:
token.isHighlighted ? highlightedTextStyle : regularTextStyle,
),
)
.toList();
}