extractText method
Implementation
List<TextSpan> extractText(String rawString) {
List<TextSpan> textSpan = [];
final urlRegExp = RegExp(
r"((https?:www\.)|(https?:\/\/)|(www\.))[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9]{1,6}(\/[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)?");
getLink(String linkString) {
textSpan.add(
TextSpan(
text: 'Link',
style: const TextStyle(
color: Colors.blue,
decoration: TextDecoration.underline,
decorationColor: Colors.blue,
),
recognizer: TapGestureRecognizer()
..onTap = () async {
if (!await launchUrl(Uri.parse(linkString))) {
throw Exception('Could not launch $linkString');
}
},
),
);
return linkString;
}
getNormalText(String normalText) {
textSpan.add(
TextSpan(
text: normalText,
style: const TextStyle(color: Colors.black),
),
);
return normalText;
}
rawString.splitMapJoin(
urlRegExp,
onMatch: (m) => getLink("${m.group(0)}"),
onNonMatch: (n) => getNormalText(n.substring(0)),
);
return textSpan;
}