Skip to content

Commit b65060e

Browse files
authored
feat: link preview v2 (#784)
* Rename LinkPreview class and prop to LinkPreviewData * Add image height and width * Update tests * Add linkPreviewBuilder * Add linkPreview to SimpleTextMessage and FlyerChatTextMessage * Allow positioning of the preview * Fix alignement when linkPreview is bigger than text
1 parent 765fb87 commit b65060e

19 files changed

+631
-313
lines changed

packages/flutter_chat_core/lib/flutter_chat_core.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export 'src/chat_controller/in_memory_chat_controller.dart';
77
export 'src/chat_controller/scroll_to_message_mixin.dart';
88
export 'src/chat_controller/upload_progress_mixin.dart';
99
export 'src/models/builders.dart';
10-
export 'src/models/link_preview.dart';
10+
export 'src/models/link_preview_data.dart';
1111
export 'src/models/message.dart';
1212
export 'src/models/message_group_status.dart';
1313
export 'src/models/user.dart';

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ typedef LoadMoreBuilder = Widget Function(BuildContext);
7575
/// Signature for building the empty chat list widget.
7676
typedef EmptyChatListBuilder = Widget Function(BuildContext);
7777

78+
/// Signature for building the link preview widget.
79+
typedef LinkPreviewBuilder = Widget? Function(BuildContext, TextMessage);
80+
7881
/// A collection of builder functions used to customize the UI components
7982
/// of the chat interface.
8083
@Freezed(fromJson: false, toJson: false)
@@ -128,6 +131,9 @@ abstract class Builders with _$Builders {
128131

129132
/// Custom builder for the empty chat list.
130133
EmptyChatListBuilder? emptyChatListBuilder,
134+
135+
/// Custom builder for the link preview widget.
136+
LinkPreviewBuilder? linkPreviewBuilder,
131137
}) = _Builders;
132138

133139
const Builders._();

packages/flutter_chat_core/lib/src/models/builders.freezed.dart

Lines changed: 19 additions & 14 deletions
Large diffs are not rendered by default.

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

Lines changed: 0 additions & 29 deletions
This file was deleted.

packages/flutter_chat_core/lib/src/models/link_preview.freezed.dart

Lines changed: 0 additions & 165 deletions
This file was deleted.

packages/flutter_chat_core/lib/src/models/link_preview.g.dart

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import 'package:freezed_annotation/freezed_annotation.dart';
2+
3+
part 'link_preview_data.freezed.dart';
4+
part 'link_preview_data.g.dart';
5+
6+
/// Represents the data extracted for a link preview.
7+
@freezed
8+
abstract class LinkPreviewData with _$LinkPreviewData {
9+
/// Creates a [LinkPreviewData] instance.
10+
const factory LinkPreviewData({
11+
/// The original URL link.
12+
required String link,
13+
14+
/// A description extracted from the link source.
15+
String? description,
16+
17+
/// The preview data of an image extracted from the link
18+
ImagePreviewData? image,
19+
20+
/// The title extracted from the link source.
21+
String? title,
22+
23+
}) = _LinkPreviewData;
24+
25+
const LinkPreviewData._();
26+
27+
/// Creates a [LinkPreviewData] instance from a JSON map.
28+
factory LinkPreviewData.fromJson(Map<String, dynamic> json) =>
29+
_$LinkPreviewDataFromJson(json);
30+
}
31+
32+
/// Represents the data extracted for a link preview image.
33+
@freezed
34+
abstract class ImagePreviewData with _$ImagePreviewData {
35+
/// Creates a [ImagePreviewData] instance.
36+
const factory ImagePreviewData({
37+
38+
/// The URL of an image associated with the link.
39+
required String url,
40+
41+
/// The image width.
42+
required double width,
43+
44+
/// The image height.
45+
required double height,
46+
47+
}) = _ImagePreviewData;
48+
49+
const ImagePreviewData._();
50+
51+
/// Creates a [ImagePreviewData] instance from a JSON map.
52+
factory ImagePreviewData.fromJson(Map<String, dynamic> json) =>
53+
_$ImagePreviewDataFromJson(json);
54+
}

0 commit comments

Comments
 (0)