Allow for MarkDown inside "about" app field (#2109)

This commit is contained in:
Imran Remtulla
2025-02-13 10:33:46 -05:00
parent 8539581fe9
commit 6c7644c9b3

View File

@ -1,6 +1,7 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:obtainium/components/generated_form_modal.dart'; import 'package:obtainium/components/generated_form_modal.dart';
import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/main.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:url_launcher/url_launcher_string.dart';
import 'package:webview_flutter/webview_flutter.dart'; import 'package:webview_flutter/webview_flutter.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:markdown/markdown.dart' as md;
class AppPage extends StatefulWidget { class AppPage extends StatefulWidget {
const AppPage({super.key, required this.appId}); const AppPage({super.key, required this.appId});
@ -221,24 +223,41 @@ class _AppPageState extends State<AppPage> {
if (app?.app.additionalSettings['about'] is String && if (app?.app.additionalSettings['about'] is String &&
app?.app.additionalSettings['about'].isNotEmpty) app?.app.additionalSettings['about'].isNotEmpty)
Column( Column(
mainAxisSize: MainAxisSize.min,
children: [ children: [
const SizedBox( const SizedBox(
height: 48, height: 48,
), ),
GestureDetector( GestureDetector(
onLongPress: () { onLongPress: () {
Clipboard.setData(ClipboardData( Clipboard.setData(ClipboardData(
text: app?.app.additionalSettings['about'] ?? '')); text: app?.app.additionalSettings['about'] ?? ''));
ScaffoldMessenger.of(context).showSnackBar(SnackBar( ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(tr('copiedToClipboard')), content: Text(tr('copiedToClipboard')),
)); ));
}, },
child: Text( child: Markdown(
app?.app.additionalSettings['about'], physics: NeverScrollableScrollPhysics(),
textAlign: TextAlign.center, shrinkWrap: true,
style: const TextStyle(fontStyle: FontStyle.italic), 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
],
),
))
], ],
), ),
], ],