@@ -91,6 +91,9 @@ class TextMessage extends StatelessWidget {
91
91
previewData: message.previewData,
92
92
text: message.text,
93
93
textWidget: _textWidgetBuilder (user, context, false ),
94
+ imageBuilder: options.previewImageBuilder != null
95
+ ? (url) => options.previewImageBuilder! .call (context, url)
96
+ : null ,
94
97
userAgent: userAgent,
95
98
width: width,
96
99
);
@@ -135,14 +138,24 @@ class TextMessage extends StatelessWidget {
135
138
else
136
139
Text (message.text, style: emojiTextStyle)
137
140
else
138
- TextMessageText (
139
- bodyLinkTextStyle: bodyLinkTextStyle,
140
- bodyTextStyle: bodyTextStyle,
141
- boldTextStyle: boldTextStyle,
142
- codeTextStyle: codeTextStyle,
143
- options: options,
144
- text: message.text,
145
- ),
141
+ options.textMessageTextBuilder != null
142
+ ? options.textMessageTextBuilder !(
143
+ context,
144
+ message.text,
145
+ options,
146
+ bodyLinkTextStyle: bodyLinkTextStyle,
147
+ bodyTextStyle: bodyTextStyle,
148
+ boldTextStyle: boldTextStyle,
149
+ codeTextStyle: codeTextStyle,
150
+ )
151
+ : TextMessageText (
152
+ bodyLinkTextStyle: bodyLinkTextStyle,
153
+ bodyTextStyle: bodyTextStyle,
154
+ boldTextStyle: boldTextStyle,
155
+ codeTextStyle: codeTextStyle,
156
+ options: options,
157
+ text: message.text,
158
+ ),
146
159
],
147
160
);
148
161
}
@@ -263,6 +276,8 @@ class TextMessageOptions {
263
276
this .openOnPreviewImageTap = false ,
264
277
this .openOnPreviewTitleTap = false ,
265
278
this .matchers = const [],
279
+ this .previewImageBuilder,
280
+ this .textMessageTextBuilder,
266
281
});
267
282
268
283
/// Whether user can tap and hold to select a text content.
@@ -279,4 +294,22 @@ class TextMessageOptions {
279
294
280
295
/// Additional matchers to parse the text.
281
296
final List <MatchText > matchers;
297
+
298
+ /// Custom link preview imageBuilder.
299
+ final PreviewImageBuilder ? previewImageBuilder;
300
+
301
+ /// Add TextMessageTextBuilder to build custom text example markdown, code highlight, etc.
302
+ final TextMessageTextBuilder ? textMessageTextBuilder;
282
303
}
304
+
305
+ typedef PreviewImageBuilder = Widget Function (BuildContext context, String url);
306
+
307
+ typedef TextMessageTextBuilder = Widget Function (
308
+ BuildContext context,
309
+ String text,
310
+ TextMessageOptions options, {
311
+ TextStyle ? bodyLinkTextStyle,
312
+ TextStyle ? bodyTextStyle,
313
+ TextStyle ? boldTextStyle,
314
+ TextStyle ? codeTextStyle,
315
+ });
0 commit comments