@@ -4,40 +4,92 @@ import 'dart:convert';
4
4
5
5
import 'package:flutter/material.dart' ;
6
6
import 'package:flutter_html/flutter_html.dart' ;
7
+ // ignore: implementation_imports
8
+ import 'package:flutter_html/src/utils.dart' ;
7
9
import 'package:flutter_svg/flutter_svg.dart' ;
8
10
9
11
CustomRender svgTagRender () => CustomRender .fromWidget (widget: (context, buildChildren) {
10
- return SvgPicture .string (
11
- context.tree.element? .outerHtml ?? "" ,
12
- key: context.key,
13
- width: double .tryParse (context.tree.element? .attributes['width' ] ?? "" ),
14
- height: double .tryParse (context.tree.element? .attributes['width' ] ?? "" ),
12
+ return Builder (
13
+ builder: (buildContext) {
14
+ return GestureDetector (
15
+ key: context.key,
16
+ child: SvgPicture .string (
17
+ context.tree.element? .outerHtml ?? "" ,
18
+ key: context.key,
19
+ width: double .tryParse (context.tree.element? .attributes['width' ] ?? "" ),
20
+ height: double .tryParse (context.tree.element? .attributes['width' ] ?? "" ),
21
+ ),
22
+ onTap: () {
23
+ if (MultipleTapGestureDetector .of (buildContext) != null ) {
24
+ MultipleTapGestureDetector .of (buildContext)! .onTap? .call ();
25
+ }
26
+ context.parser.onImageTap? .call (
27
+ context.tree.element? .outerHtml ?? "" ,
28
+ context,
29
+ context.tree.element! .attributes.cast (),
30
+ context.tree.element
31
+ );
32
+ },
33
+ );
34
+ }
15
35
);
16
36
});
17
37
18
38
CustomRender svgDataImageRender () => CustomRender .fromWidget (widget: (context, buildChildren) {
19
39
final dataUri = _dataUriFormat.firstMatch (_src (context.tree.element? .attributes.cast () ?? < String , String > {})! );
20
40
final data = dataUri? .namedGroup ('data' );
21
41
if (data == null ) return Container (height: 0 , width: 0 );
22
- if (dataUri? .namedGroup ('encoding' ) == ';base64' ) {
23
- final decodedImage = base64.decode (data.trim ());
24
- return SvgPicture .memory (
25
- decodedImage,
26
- width: _width (context.tree.element? .attributes.cast () ?? < String , String > {}),
27
- height: _height (context.tree.element? .attributes.cast () ?? < String , String > {}),
28
- );
29
- }
30
- return SvgPicture .string (Uri .decodeFull (data));
42
+ return Builder (
43
+ builder: (buildContext) {
44
+ return GestureDetector (
45
+ key: context.key,
46
+ child: dataUri? .namedGroup ('encoding' ) == ';base64' ? SvgPicture .memory (
47
+ base64.decode (data.trim ()),
48
+ width: _width (context.tree.element? .attributes.cast () ?? < String , String > {}),
49
+ height: _height (context.tree.element? .attributes.cast () ?? < String , String > {}),
50
+ ) : SvgPicture .string (Uri .decodeFull (data)),
51
+ onTap: () {
52
+ if (MultipleTapGestureDetector .of (buildContext) != null ) {
53
+ MultipleTapGestureDetector .of (buildContext)! .onTap? .call ();
54
+ }
55
+ context.parser.onImageTap? .call (
56
+ Uri .decodeFull (data),
57
+ context,
58
+ context.tree.element! .attributes.cast (),
59
+ context.tree.element
60
+ );
61
+ },
62
+ );
63
+ }
64
+ );
31
65
});
32
66
33
67
CustomRender svgNetworkImageRender () => CustomRender .fromWidget (widget: (context, buildChildren) {
34
68
if (context.tree.element? .attributes["src" ] == null ) {
35
69
return Container (height: 0 , width: 0 );
36
70
}
37
- return SvgPicture .network (
38
- context.tree.element! .attributes["src" ]! ,
39
- width: _width (context.tree.element! .attributes.cast ()),
40
- height: _height (context.tree.element! .attributes.cast ()),
71
+ return Builder (
72
+ builder: (buildContext) {
73
+ return GestureDetector (
74
+ key: context.key,
75
+ child: SvgPicture .network (
76
+ context.tree.element! .attributes["src" ]! ,
77
+ width: _width (context.tree.element! .attributes.cast ()),
78
+ height: _height (context.tree.element! .attributes.cast ()),
79
+ ),
80
+ onTap: () {
81
+ if (MultipleTapGestureDetector .of (buildContext) != null ) {
82
+ MultipleTapGestureDetector .of (buildContext)! .onTap? .call ();
83
+ }
84
+ context.parser.onImageTap? .call (
85
+ context.tree.element! .attributes["src" ]! ,
86
+ context,
87
+ context.tree.element! .attributes.cast (),
88
+ context.tree.element
89
+ );
90
+ },
91
+ );
92
+ }
41
93
);
42
94
});
43
95
@@ -46,7 +98,25 @@ CustomRender svgAssetImageRender() => CustomRender.fromWidget(widget: (context,
46
98
return Container (height: 0 , width: 0 );
47
99
}
48
100
final assetPath = _src (context.tree.element! .attributes.cast ())! .replaceFirst ('asset:' , '' );
49
- return SvgPicture .asset (assetPath);
101
+ return Builder (
102
+ builder: (buildContext) {
103
+ return GestureDetector (
104
+ key: context.key,
105
+ child: SvgPicture .asset (assetPath),
106
+ onTap: () {
107
+ if (MultipleTapGestureDetector .of (buildContext) != null ) {
108
+ MultipleTapGestureDetector .of (buildContext)! .onTap? .call ();
109
+ }
110
+ context.parser.onImageTap? .call (
111
+ assetPath,
112
+ context,
113
+ context.tree.element! .attributes.cast (),
114
+ context.tree.element
115
+ );
116
+ },
117
+ );
118
+ }
119
+ );
50
120
});
51
121
52
122
CustomRenderMatcher svgTagMatcher () => (context) {
0 commit comments