Skip to content

Commit 8db0104

Browse files
committed
Upgrade link functions to provide more control over onImageTap and onLinkTap
1 parent 86ac375 commit 8db0104

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

lib/html_parser.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ import 'package:html/dom.dart' as dom;
1616
import 'package:html/parser.dart' as htmlparser;
1717
import 'package:webview_flutter/webview_flutter.dart';
1818

19-
typedef OnTap = void Function(String url);
19+
typedef OnTap = void Function(
20+
String url,
21+
RenderContext context,
22+
Map<String, String> attributes,
23+
dom.Element element,
24+
);
2025
typedef CustomRender = dynamic Function(
2126
RenderContext context,
2227
Widget parsedChild,
@@ -358,7 +363,7 @@ class HtmlParser extends StatelessWidget {
358363
: childStyle.merge(childSpan.style)),
359364
semanticsLabel: childSpan.semanticsLabel,
360365
recognizer: TapGestureRecognizer()
361-
..onTap = () => onLinkTap?.call(tree.href),
366+
..onTap = () => onLinkTap?.call(tree.href, context, tree.attributes, tree.element),
362367
);
363368
} else {
364369
return WidgetSpan(
@@ -369,7 +374,7 @@ class HtmlParser extends StatelessWidget {
369374
MultipleTapGestureRecognizer>(
370375
() => MultipleTapGestureRecognizer(),
371376
(instance) {
372-
instance..onTap = () => onLinkTap?.call(tree.href);
377+
instance..onTap = () => onLinkTap?.call(tree.href, context, tree.attributes, tree.element);
373378
},
374379
),
375380
},

lib/src/replaced_element.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
88
import 'package:flutter/widgets.dart';
99
import 'package:flutter_html/html_parser.dart';
1010
import 'package:flutter_html/src/html_elements.dart';
11+
import 'package:flutter_html/src/utils.dart';
1112
import 'package:flutter_html/style.dart';
1213
import 'package:flutter_svg/flutter_svg.dart';
1314
import 'package:html/dom.dart' as dom;
@@ -82,7 +83,16 @@ class ImageContentElement extends ReplacedElement {
8283
if (entry.key.call(attributes, element)) {
8384
final widget = entry.value.call(context, attributes, element);
8485
if (widget != null) {
85-
return widget;
86+
return RawGestureDetector(
87+
child: widget,
88+
gestures: {
89+
MultipleTapGestureRecognizer: GestureRecognizerFactoryWithHandlers<MultipleTapGestureRecognizer>(
90+
() => MultipleTapGestureRecognizer(), (instance) {
91+
instance..onTap = () => context.parser.onImageTap?.call(src, context, attributes, element);
92+
},
93+
),
94+
},
95+
);
8696
}
8797
}
8898
}

0 commit comments

Comments
 (0)