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..7de96584e 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,11 @@ class _HyperlinkTextState extends State { ); } } + +/// Custom builder for link texts on Markdown +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