@@ -135,14 +135,24 @@ class TextMessage extends StatelessWidget {
135
135
else
136
136
Text (message.text, style: emojiTextStyle)
137
137
else
138
- TextMessageText (
139
- bodyLinkTextStyle: bodyLinkTextStyle,
140
- bodyTextStyle: bodyTextStyle,
141
- boldTextStyle: boldTextStyle,
142
- codeTextStyle: codeTextStyle,
143
- options: options,
144
- text: message.text,
145
- ),
138
+ options.textMessageTextBuilder != null
139
+ ? options.textMessageTextBuilder !(
140
+ context,
141
+ message.text,
142
+ options,
143
+ bodyLinkTextStyle: bodyLinkTextStyle,
144
+ bodyTextStyle: bodyTextStyle,
145
+ boldTextStyle: boldTextStyle,
146
+ codeTextStyle: codeTextStyle,
147
+ )
148
+ : TextMessageText (
149
+ bodyLinkTextStyle: bodyLinkTextStyle,
150
+ bodyTextStyle: bodyTextStyle,
151
+ boldTextStyle: boldTextStyle,
152
+ codeTextStyle: codeTextStyle,
153
+ options: options,
154
+ text: message.text,
155
+ ),
146
156
],
147
157
);
148
158
}
@@ -263,6 +273,7 @@ class TextMessageOptions {
263
273
this .openOnPreviewImageTap = false ,
264
274
this .openOnPreviewTitleTap = false ,
265
275
this .matchers = const [],
276
+ this .textMessageTextBuilder,
266
277
});
267
278
268
279
/// Whether user can tap and hold to select a text content.
@@ -279,4 +290,17 @@ class TextMessageOptions {
279
290
280
291
/// Additional matchers to parse the text.
281
292
final List <MatchText > matchers;
293
+
294
+ /// Add TextMessageTextBuilder to build custom text example markdown, code highlight, etc.
295
+ final TextMessageTextBuilder ? textMessageTextBuilder;
282
296
}
297
+
298
+ typedef TextMessageTextBuilder = Widget Function (
299
+ BuildContext context,
300
+ String text,
301
+ TextMessageOptions options, {
302
+ TextStyle ? bodyLinkTextStyle,
303
+ TextStyle ? bodyTextStyle,
304
+ TextStyle ? boldTextStyle,
305
+ TextStyle ? codeTextStyle,
306
+ });
0 commit comments