feat: return linkify list

This commit is contained in:
Minh Tri 2024-05-30 10:45:15 +07:00 committed by JohnE
parent 9dbaa08a7b
commit 98299e28c4
1 changed files with 12 additions and 1 deletions

View File

@ -24,6 +24,7 @@ class LinkifyText extends StatelessWidget {
this.maxLines, this.maxLines,
this.semanticsLabel, this.semanticsLabel,
this.textWidthBasis, this.textWidthBasis,
this.linkifyListCallBack,
Key? key}) Key? key})
: super(key: key); : super(key: key);
@ -131,6 +132,8 @@ class LinkifyText extends StatelessWidget {
final Map<LinkType, TextStyle>? customLinkStyles; final Map<LinkType, TextStyle>? customLinkStyles;
final void Function(List<Link>)? linkifyListCallBack;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Text.rich( return Text.rich(
@ -139,7 +142,8 @@ class LinkifyText extends StatelessWidget {
linkStyle: linkStyle, linkStyle: linkStyle,
onTap: onTap, onTap: onTap,
linkTypes: linkTypes, linkTypes: linkTypes,
customLinkStyles: customLinkStyles), customLinkStyles: customLinkStyles,
linkifyListCallBack: linkifyListCallBack),
key: key, key: key,
style: textStyle, style: textStyle,
strutStyle: strutStyle, strutStyle: strutStyle,
@ -374,6 +378,7 @@ TextSpan _linkify({
List<LinkType>? linkTypes, List<LinkType>? linkTypes,
Map<LinkType, TextStyle>? customLinkStyles, Map<LinkType, TextStyle>? customLinkStyles,
Function(Link)? onTap, Function(Link)? onTap,
Function(List<Link>)? linkifyListCallBack,
}) { }) {
final _regExp = constructRegExpFromLinkType(linkTypes ?? [LinkType.url]); final _regExp = constructRegExpFromLinkType(linkTypes ?? [LinkType.url]);
@ -383,6 +388,7 @@ TextSpan _linkify({
final texts = text.split(_regExp); final texts = text.split(_regExp);
final List<InlineSpan> spans = []; final List<InlineSpan> spans = [];
final links = _regExp.allMatches(text).toList(); final links = _regExp.allMatches(text).toList();
final List<Link> linkifyList = [];
for (final text in texts) { for (final text in texts) {
spans.add(TextSpan( spans.add(TextSpan(
@ -402,7 +408,12 @@ TextSpan _linkify({
}, },
), ),
); );
linkifyList.add(link);
} }
} }
linkifyListCallBack?.call(linkifyList);
return TextSpan(children: spans); return TextSpan(children: spans);
} }