diff --git a/lib/controllers/url_preview_controller.dart b/lib/controllers/url_preview_controller.dart index e54efea..c2161d5 100644 --- a/lib/controllers/url_preview_controller.dart +++ b/lib/controllers/url_preview_controller.dart @@ -7,17 +7,14 @@ import "package:nexus/controllers/header_controller.dart"; import "package:nexus/helpers/extensions/mxc_to_https.dart"; class UrlPreviewController extends AsyncNotifier { - final TextMessage message; - UrlPreviewController(this.message); + final String link; + UrlPreviewController(this.link); @override Future build() async { final homeserver = ref.watch(ClientStateController.provider)?.homeserverUrl; - final link = RegExp( - r'''https?://[^\s"'<>]+''', - ).allMatches(message.text).firstOrNull?.group(0); - if (homeserver != null && link != null && !link.contains("matrix.to")) { + if (homeserver != null && !link.contains("matrix.to")) { { final response = await get( Uri.parse(homeserver) @@ -57,7 +54,7 @@ class UrlPreviewController extends AsyncNotifier { } static final provider = AsyncNotifierProvider.autoDispose - .family( + .family( UrlPreviewController.new, ); } diff --git a/lib/widgets/chat_page/wrappers/text_message_wrapper.dart b/lib/widgets/chat_page/wrappers/text_message_wrapper.dart index d6f7aa8..8d7a625 100644 --- a/lib/widgets/chat_page/wrappers/text_message_wrapper.dart +++ b/lib/widgets/chat_page/wrappers/text_message_wrapper.dart @@ -40,6 +40,12 @@ class TextMessageWrapper extends ConsumerWidget { final colorScheme = theme.colorScheme; final textMessage = message is TextMessage ? message as TextMessage : null; + final link = textMessage == null + ? null + : RegExp( + r'''https?://[^\s"'<>]+''', + ).allMatches(textMessage.text).firstOrNull?.group(0); + return MessageWrapper( message, ClipRRect( @@ -97,9 +103,9 @@ class TextMessageWrapper extends ConsumerWidget { ), if (textMessage?.editedAt != null) Text("(edited)", style: theme.textTheme.labelSmall), - if (textMessage != null) + if (link != null) ref - .watch(UrlPreviewController.provider(textMessage)) + .watch(UrlPreviewController.provider(link)) .betterWhen( loading: SizedBox.shrink, data: (preview) => preview == null @@ -117,7 +123,7 @@ class TextMessageWrapper extends ConsumerWidget { fit: BoxFit.cover, errorBuilder: (_, _, _) => SizedBox.shrink(), ), - text: textMessage.text, + text: link, backgroundColor: isSentByMe ? colorScheme.inversePrimary : colorScheme.surfaceContainerLow,