Skip to content

Commit c922a0c

Browse files
committed
chore: fixes after LinkPreview PR
1 parent b65060e commit c922a0c

File tree

8 files changed

+35
-30
lines changed

8 files changed

+35
-30
lines changed

packages/flutter_chat_core/lib/flutter_chat_core.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ export 'src/theme/chat_theme.dart';
1515
export 'src/theme/chat_theme_extension.dart';
1616
export 'src/utils/get_icon_for_status.dart';
1717
export 'src/utils/is_only_emoji.dart';
18+
export 'src/utils/link_preview_position.dart';
1819
export 'src/utils/typedefs.dart';
1920
export 'src/utils/user_cache.dart';

packages/flutter_chat_core/lib/src/models/link_preview_data.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ abstract class LinkPreviewData with _$LinkPreviewData {
1919

2020
/// The title extracted from the link source.
2121
String? title,
22-
2322
}) = _LinkPreviewData;
2423

2524
const LinkPreviewData._();
@@ -34,7 +33,6 @@ abstract class LinkPreviewData with _$LinkPreviewData {
3433
abstract class ImagePreviewData with _$ImagePreviewData {
3534
/// Creates a [ImagePreviewData] instance.
3635
const factory ImagePreviewData({
37-
3836
/// The URL of an image associated with the link.
3937
required String url,
4038

@@ -43,12 +41,11 @@ abstract class ImagePreviewData with _$ImagePreviewData {
4341

4442
/// The image height.
4543
required double height,
46-
4744
}) = _ImagePreviewData;
4845

4946
const ImagePreviewData._();
5047

5148
/// Creates a [ImagePreviewData] instance from a JSON map.
5249
factory ImagePreviewData.fromJson(Map<String, dynamic> json) =>
5350
_$ImagePreviewDataFromJson(json);
54-
}
51+
}

packages/flutter_chat_ui/lib/flutter_chat_ui.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export 'src/chat_message/chat_message.dart';
99
export 'src/composer.dart';
1010
export 'src/empty_chat_list.dart';
1111
export 'src/is_typing.dart';
12-
export 'src/link_preview.dart';
1312
export 'src/load_more.dart';
1413
export 'src/scroll_to_bottom.dart';
1514
export 'src/simple_text_message.dart';

packages/flutter_chat_ui/lib/src/chat_message/chat_message_internal.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class _ChatMessageInternalState extends State<ChatMessageInternal> {
8989

9090
@override
9191
Widget build(BuildContext context) {
92-
final builders = context.watch<Builders>();
92+
final builders = context.read<Builders>();
9393
final child = _buildMessage(
9494
context,
9595
builders,

packages/flutter_chat_ui/lib/src/simple_text_message.dart

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_chat_core/flutter_chat_core.dart';
33
import 'package:provider/provider.dart';
44

5-
import 'link_preview.dart';
6-
75
/// A widget that displays a simple text message.
86
class SimpleTextMessage extends StatelessWidget {
97
/// The text message data model.
@@ -18,6 +16,9 @@ class SimpleTextMessage extends StatelessWidget {
1816
/// Border radius of the message bubble.
1917
final BorderRadiusGeometry? borderRadius;
2018

19+
/// Box constraints for the message bubble.
20+
final BoxConstraints? constraints;
21+
2122
/// Font size for messages containing only emojis.
2223
final double? onlyEmojiFontSize;
2324

@@ -45,6 +46,9 @@ class SimpleTextMessage extends StatelessWidget {
4546
/// Position of the timestamp and status indicator relative to the text.
4647
final TimeAndStatusPosition timeAndStatusPosition;
4748

49+
/// Insets for the timestamp and status indicator when [timeAndStatusPosition] is [TimeAndStatusPosition.inline].
50+
final EdgeInsetsGeometry? timeAndStatusPositionInlineInsets;
51+
4852
/// The position of the link preview widget relative to the text.
4953
/// If set to [LinkPreviewPosition.none], the link preview widget will not be displayed.
5054
/// A [LinkPreviewBuilder] must be provided for the preview to be displayed.
@@ -57,6 +61,7 @@ class SimpleTextMessage extends StatelessWidget {
5761
required this.index,
5862
this.padding = const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
5963
this.borderRadius,
64+
this.constraints,
6065
this.onlyEmojiFontSize = 48,
6166
this.sentBackgroundColor,
6267
this.receivedBackgroundColor,
@@ -66,6 +71,7 @@ class SimpleTextMessage extends StatelessWidget {
6671
this.showTime = true,
6772
this.showStatus = true,
6873
this.timeAndStatusPosition = TimeAndStatusPosition.end,
74+
this.timeAndStatusPositionInlineInsets = const EdgeInsets.only(bottom: 2),
6975
this.linkPreviewPosition = LinkPreviewPosition.bottom,
7076
});
7177

@@ -100,7 +106,7 @@ class SimpleTextMessage extends StatelessWidget {
100106

101107
final linkPreviewWidget =
102108
linkPreviewPosition != LinkPreviewPosition.none
103-
? context.watch<Builders>().linkPreviewBuilder?.call(
109+
? context.read<Builders>().linkPreviewBuilder?.call(
104110
context,
105111
message,
106112
)
@@ -109,16 +115,11 @@ class SimpleTextMessage extends StatelessWidget {
109115
return ClipRRect(
110116
borderRadius: borderRadius ?? theme.shape,
111117
child: Container(
112-
decoration:
113-
_isOnlyEmoji
114-
? null
115-
: BoxDecoration(
116-
color: backgroundColor,
117-
borderRadius: borderRadius ?? theme.shape,
118-
),
118+
constraints: constraints,
119+
decoration: _isOnlyEmoji ? null : BoxDecoration(color: backgroundColor),
119120
child: Column(
120121
mainAxisSize: MainAxisSize.min,
121-
crossAxisAlignment: CrossAxisAlignment.end,
122+
crossAxisAlignment: CrossAxisAlignment.start,
122123
children: [
123124
if (linkPreviewWidget != null &&
124125
linkPreviewPosition == LinkPreviewPosition.top)
@@ -173,7 +174,10 @@ class SimpleTextMessage extends StatelessWidget {
173174
children: [
174175
Flexible(child: textContent),
175176
const SizedBox(width: 4),
176-
timeAndStatus,
177+
Padding(
178+
padding: timeAndStatusPositionInlineInsets ?? EdgeInsets.zero,
179+
child: timeAndStatus,
180+
),
177181
],
178182
);
179183
case TimeAndStatusPosition.end:

packages/flyer_chat_text_message/lib/src/flyer_chat_text_message.dart

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_chat_core/flutter_chat_core.dart';
3-
import 'package:flutter_chat_ui/flutter_chat_ui.dart' show LinkPreviewPosition;
43
import 'package:gpt_markdown/gpt_markdown.dart';
54
import 'package:provider/provider.dart';
65

@@ -20,6 +19,9 @@ class FlyerChatTextMessage extends StatelessWidget {
2019
/// Border radius of the message bubble.
2120
final BorderRadiusGeometry? borderRadius;
2221

22+
/// Box constraints for the message bubble.
23+
final BoxConstraints? constraints;
24+
2325
/// Font size for messages containing only emojis.
2426
final double? onlyEmojiFontSize;
2527

@@ -47,6 +49,9 @@ class FlyerChatTextMessage extends StatelessWidget {
4749
/// Position of the timestamp and status indicator relative to the text.
4850
final TimeAndStatusPosition timeAndStatusPosition;
4951

52+
/// Insets for the timestamp and status indicator when [timeAndStatusPosition] is [TimeAndStatusPosition.inline].
53+
final EdgeInsetsGeometry? timeAndStatusPositionInlineInsets;
54+
5055
/// The callback function to handle link clicks.
5156
final void Function(String url, String title)? onLinkTab;
5257

@@ -62,6 +67,7 @@ class FlyerChatTextMessage extends StatelessWidget {
6267
required this.index,
6368
this.padding = const EdgeInsets.symmetric(horizontal: 16, vertical: 10),
6469
this.borderRadius,
70+
this.constraints,
6571
this.onlyEmojiFontSize = 48,
6672
this.sentBackgroundColor,
6773
this.receivedBackgroundColor,
@@ -71,6 +77,7 @@ class FlyerChatTextMessage extends StatelessWidget {
7177
this.showTime = true,
7278
this.showStatus = true,
7379
this.timeAndStatusPosition = TimeAndStatusPosition.end,
80+
this.timeAndStatusPositionInlineInsets = const EdgeInsets.only(bottom: 2),
7481
this.onLinkTab,
7582
this.linkPreviewPosition = LinkPreviewPosition.bottom,
7683
});
@@ -107,7 +114,7 @@ class FlyerChatTextMessage extends StatelessWidget {
107114

108115
final linkPreviewWidget =
109116
linkPreviewPosition != LinkPreviewPosition.none
110-
? context.watch<Builders>().linkPreviewBuilder?.call(
117+
? context.read<Builders>().linkPreviewBuilder?.call(
111118
context,
112119
message,
113120
)
@@ -116,16 +123,11 @@ class FlyerChatTextMessage extends StatelessWidget {
116123
return ClipRRect(
117124
borderRadius: borderRadius ?? theme.shape,
118125
child: Container(
119-
decoration:
120-
_isOnlyEmoji
121-
? null
122-
: BoxDecoration(
123-
color: backgroundColor,
124-
borderRadius: borderRadius ?? theme.shape,
125-
),
126+
constraints: constraints,
127+
decoration: _isOnlyEmoji ? null : BoxDecoration(color: backgroundColor),
126128
child: Column(
127129
mainAxisSize: MainAxisSize.min,
128-
crossAxisAlignment: CrossAxisAlignment.end,
130+
crossAxisAlignment: CrossAxisAlignment.start,
129131
children: [
130132
if (linkPreviewWidget != null &&
131133
linkPreviewPosition == LinkPreviewPosition.top)
@@ -180,7 +182,10 @@ class FlyerChatTextMessage extends StatelessWidget {
180182
children: [
181183
Flexible(child: textContent),
182184
const SizedBox(width: 4),
183-
timeAndStatus,
185+
Padding(
186+
padding: timeAndStatusPositionInlineInsets ?? EdgeInsets.zero,
187+
child: timeAndStatus,
188+
),
184189
],
185190
);
186191
case TimeAndStatusPosition.end:

packages/flyer_chat_text_message/pubspec.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ dependencies:
1313
flutter:
1414
sdk: flutter
1515
flutter_chat_core: ^2.2.1
16-
flutter_chat_ui: ^2.2.1
1716
gpt_markdown: ^1.0.16
1817
provider: ^6.1.4
1918

0 commit comments

Comments
 (0)