From 4cd8bc7dde9ff3a555b35065537fb3fdb4ae7be7 Mon Sep 17 00:00:00 2001 From: Matias de Andrea Date: Fri, 6 Feb 2026 13:34:33 +0100 Subject: [PATCH 1/2] feat: add hyperlink support in Markdown rendering for deb and snap pages --- packages/app_center/lib/deb/local_deb_page.dart | 4 ++++ packages/app_center/lib/snapd/snap_page.dart | 3 +++ packages/app_center/lib/widgets/hyperlink_text.dart | 9 +++++++++ packages/app_center/pubspec.lock | 2 +- packages/app_center/pubspec.yaml | 1 + 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/app_center/lib/deb/local_deb_page.dart b/packages/app_center/lib/deb/local_deb_page.dart index 68286f1cc..662591865 100644 --- a/packages/app_center/lib/deb/local_deb_page.dart +++ b/packages/app_center/lib/deb/local_deb_page.dart @@ -4,6 +4,7 @@ import 'package:app_center/error/error.dart'; import 'package:app_center/extensions/string_extensions.dart'; import 'package:app_center/l10n.dart'; import 'package:app_center/layout.dart'; +import 'package:app_center/widgets/hyperlink_text.dart'; import 'package:app_center/widgets/widgets.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; @@ -90,6 +91,9 @@ class _Description extends StatelessWidget { const SizedBox(height: kPagePadding), MarkdownBody( selectable: true, + builders: { + 'a': HyperlinkTextMarkdown(), + }, data: debData.details.description.escapedMarkdown(), ), ], diff --git a/packages/app_center/lib/snapd/snap_page.dart b/packages/app_center/lib/snapd/snap_page.dart index 54b72afd7..69d1b3f4a 100644 --- a/packages/app_center/lib/snapd/snap_page.dart +++ b/packages/app_center/lib/snapd/snap_page.dart @@ -234,6 +234,9 @@ class _SnapView extends StatelessWidget { const SizedBox(height: kPagePadding), MarkdownBody( selectable: true, + builders: { + 'a': HyperlinkTextMarkdown(), + }, data: snapData.snap.description.escapedMarkdown(), ), ], diff --git a/packages/app_center/lib/widgets/hyperlink_text.dart b/packages/app_center/lib/widgets/hyperlink_text.dart index ba6862227..2e021ea28 100644 --- a/packages/app_center/lib/widgets/hyperlink_text.dart +++ b/packages/app_center/lib/widgets/hyperlink_text.dart @@ -1,5 +1,7 @@ import 'package:app_center/constants.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:markdown/markdown.dart' as md; import 'package:url_launcher/url_launcher_string.dart'; /// A [Text] widget formatted as an accessible hyperlink. @@ -63,3 +65,10 @@ class _HyperlinkTextState extends State { ); } } + +class HyperlinkTextMarkdown extends MarkdownElementBuilder { + @override + Widget? visitElementAfter(md.Element element, TextStyle? preferredStyle) { + return HyperlinkText(text: element.textContent, link: element.textContent); + } +} diff --git a/packages/app_center/pubspec.lock b/packages/app_center/pubspec.lock index f42bf519e..45113e665 100644 --- a/packages/app_center/pubspec.lock +++ b/packages/app_center/pubspec.lock @@ -740,7 +740,7 @@ packages: source: hosted version: "1.4.0+1" markdown: - dependency: transitive + dependency: "direct main" description: name: markdown sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1" diff --git a/packages/app_center/pubspec.yaml b/packages/app_center/pubspec.yaml index c3b581053..d50c76df2 100644 --- a/packages/app_center/pubspec.yaml +++ b/packages/app_center/pubspec.yaml @@ -36,6 +36,7 @@ dependencies: intl: any json_annotation: ^4.9.0 jwt_decode: ^0.3.1 + markdown: ^7.3.0 meta: ^1.15.0 package_info_plus: ^8.0.2 packagekit: ^0.2.7 From 846d4767e32d5e316dc8d806b6303aaff8dd1ebd Mon Sep 17 00:00:00 2001 From: Matias de Andrea Date: Fri, 6 Feb 2026 13:48:47 +0100 Subject: [PATCH 2/2] feat: add documentation on custom builder for link texts in Markdown --- packages/app_center/lib/widgets/hyperlink_text.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/app_center/lib/widgets/hyperlink_text.dart b/packages/app_center/lib/widgets/hyperlink_text.dart index 2e021ea28..7de96584e 100644 --- a/packages/app_center/lib/widgets/hyperlink_text.dart +++ b/packages/app_center/lib/widgets/hyperlink_text.dart @@ -66,6 +66,7 @@ class _HyperlinkTextState extends State { } } +/// Custom builder for link texts on Markdown class HyperlinkTextMarkdown extends MarkdownElementBuilder { @override Widget? visitElementAfter(md.Element element, TextStyle? preferredStyle) {