From 6c7644c9b3c4a0207605bbbd87d94c17ae56ecae Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Thu, 13 Feb 2025 10:33:46 -0500 Subject: [PATCH] Allow for MarkDown inside "about" app field (#2109) --- lib/pages/app.dart | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/lib/pages/app.dart b/lib/pages/app.dart index d369d04..0f9cc8d 100644 --- a/lib/pages/app.dart +++ b/lib/pages/app.dart @@ -1,6 +1,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:obtainium/components/generated_form_modal.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/main.dart'; @@ -12,6 +13,7 @@ import 'package:obtainium/providers/source_provider.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'package:provider/provider.dart'; +import 'package:markdown/markdown.dart' as md; class AppPage extends StatefulWidget { const AppPage({super.key, required this.appId}); @@ -221,24 +223,41 @@ class _AppPageState extends State { if (app?.app.additionalSettings['about'] is String && app?.app.additionalSettings['about'].isNotEmpty) Column( + mainAxisSize: MainAxisSize.min, children: [ const SizedBox( height: 48, ), GestureDetector( - onLongPress: () { - Clipboard.setData(ClipboardData( - text: app?.app.additionalSettings['about'] ?? '')); - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text(tr('copiedToClipboard')), - )); - }, - child: Text( - app?.app.additionalSettings['about'], - textAlign: TextAlign.center, - style: const TextStyle(fontStyle: FontStyle.italic), - ), - ) + onLongPress: () { + Clipboard.setData(ClipboardData( + text: app?.app.additionalSettings['about'] ?? '')); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(tr('copiedToClipboard')), + )); + }, + child: Markdown( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + styleSheet: MarkdownStyleSheet( + blockquoteDecoration: + BoxDecoration(color: Theme.of(context).cardColor), + textAlign: WrapAlignment.center), + data: app?.app.additionalSettings['about'], + onTapLink: (text, href, title) { + if (href != null) { + launchUrlString(href, + mode: LaunchMode.externalApplication); + } + }, + extensionSet: md.ExtensionSet( + md.ExtensionSet.gitHubFlavored.blockSyntaxes, + [ + md.EmojiSyntax(), + ...md.ExtensionSet.gitHubFlavored.inlineSyntaxes + ], + ), + )) ], ), ],