diff --git a/lib/widgets/markdown.dart b/lib/widgets/markdown.dart index c1467fba..ce06efa0 100644 --- a/lib/widgets/markdown.dart +++ b/lib/widgets/markdown.dart @@ -9,9 +9,12 @@ class CustomMarkdown extends StatelessWidget { super.key, required this.data, this.padding = const EdgeInsets.all(16.0), + this.onTapLink, }); + final String data; final EdgeInsets padding; + final void Function(String text, String? href, String title)? onTapLink; @override Widget build(BuildContext context) { @@ -25,9 +28,10 @@ class CustomMarkdown extends StatelessWidget { data: data, selectable: true, extensionSet: md.ExtensionSet.gitHubFlavored, - onTapLink: (text, href, title) { - launchUrl(Uri.parse(href ?? "")); - }, + onTapLink: onTapLink ?? + (text, href, title) { + launchUrl(Uri.parse(href ?? "")); + }, builders: { "inlineButton": InlineButton(), }, diff --git a/test/widgets/markdown_test.dart b/test/widgets/markdown_test.dart index 146bf956..f9a9ec17 100644 --- a/test/widgets/markdown_test.dart +++ b/test/widgets/markdown_test.dart @@ -1,5 +1,7 @@ +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:apidash/widgets/markdown.dart'; @@ -32,7 +34,7 @@ void main() { expect(markdownTextFinder, findsOneWidget); }); - testWidgets('CustomMarkdown onTapLink callback works', + testWidgets('CustomMarkdown has proper text rendered', (WidgetTester tester) async { await tester.pumpWidget(MaterialApp( home: GestureDetector( @@ -45,10 +47,29 @@ void main() { await tester.tap(find.text('Link Text')); await tester.pump(); - expect(find.text('Link Text'), findsOneWidget); expect(find.text('https://apidash.dev/'), findsNothing); }); + + testWidgets('CustomMarkdown creates hyperlink', + (WidgetTester tester) async { + bool linkTapped = false; + await tester.pumpWidget(MaterialApp( + home: CustomMarkdown( + data: '[Link Text](https://apidash.dev/)', + onTapLink: (text, href, title) { + linkTapped = true; + expect(text, 'Link Text'); + expect(href, 'https://apidash.dev/'); + }, + ), + )); + expect(find.byType(Markdown), findsOneWidget); + final markdownWidget = tester.widget(find.byType(Markdown)); + expect(markdownWidget.data, '[Link Text](https://apidash.dev/)'); + await tester.tap(find.text('Link Text')); + expect(linkTapped, true); + }); }); }