feat(ui): add support for StreamMessageThemeData.urlAttachmentTextMaxLine.

Signed-off-by: xsahil03x <xdsahil@gmail.com>
This commit is contained in:
Sahil Kumar
2023-05-19 19:20:26 +05:30
committed by xsahil03x
parent 4df2c2ffbf
commit 1ac5a4f9bc
4 changed files with 68 additions and 31 deletions
@@ -91,7 +91,7 @@ class StreamUrlAttachment extends StatelessWidget {
),
Positioned(
left: 0,
bottom: -1,
bottom: 0,
child: DecoratedBox(
decoration: BoxDecoration(
borderRadius: const BorderRadius.only(
@@ -103,7 +103,8 @@ class StreamUrlAttachment extends StatelessWidget {
padding: const EdgeInsets.only(
top: 8,
left: 8,
right: 8,
right: 12,
bottom: 4,
),
child: Text(
hostDisplayName,
@@ -119,20 +120,40 @@ class StreamUrlAttachment extends StatelessWidget {
padding: textPadding,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
children: <Widget>[
if (urlAttachment.title != null)
Text(
urlAttachment.title!.trim(),
maxLines: messageTheme.urlAttachmentTitleMaxLine ?? 1,
overflow: TextOverflow.ellipsis,
style: messageTheme.urlAttachmentTitleStyle,
),
Builder(builder: (context) {
final maxLines = messageTheme.urlAttachmentTitleMaxLine;
TextOverflow? overflow;
if (maxLines != null && maxLines > 0) {
overflow = TextOverflow.ellipsis;
}
return Text(
urlAttachment.title!.trim(),
maxLines: maxLines,
overflow: overflow,
style: messageTheme.urlAttachmentTitleStyle,
);
}),
if (urlAttachment.text != null)
Text(
urlAttachment.text!,
style: messageTheme.urlAttachmentTextStyle,
),
],
Builder(builder: (context) {
final maxLines = messageTheme.urlAttachmentTextMaxLine;
TextOverflow? overflow;
if (maxLines != null && maxLines > 0) {
overflow = TextOverflow.ellipsis;
}
return Text(
urlAttachment.text!,
maxLines: maxLines,
overflow: overflow,
style: messageTheme.urlAttachmentTextStyle,
);
}),
].insertBetween(const SizedBox(height: 4)),
),
),
],
@@ -66,7 +66,7 @@ class StreamColorTheme {
this.appBg = const Color(0xff070A0D),
this.barsBg = const Color(0xff101418),
this.linkBg = const Color(0xff00193D),
this.accentPrimary = const Color(0xff005FFF),
this.accentPrimary = const Color(0xff337eff),
this.accentError = const Color(0xffFF3742),
this.accentInfo = const Color(0xff20E070),
this.borderTop = const Effect(
@@ -27,6 +27,7 @@ class StreamMessageThemeData with Diagnosticable {
this.urlAttachmentTitleStyle,
this.urlAttachmentTextStyle,
this.urlAttachmentTitleMaxLine,
this.urlAttachmentTextMaxLine,
}) : urlAttachmentBackgroundColor =
urlAttachmentBackgroundColor ?? linkBackgroundColor;
@@ -82,6 +83,9 @@ class StreamMessageThemeData with Diagnosticable {
/// Max number of lines in Url link title.
final int? urlAttachmentTitleMaxLine;
/// Max number of lines in Url link text.
final int? urlAttachmentTextMaxLine;
/// Copy with a theme
StreamMessageThemeData copyWith({
TextStyle? messageTextStyle,
@@ -102,6 +106,7 @@ class StreamMessageThemeData with Diagnosticable {
TextStyle? urlAttachmentTitleStyle,
TextStyle? urlAttachmentTextStyle,
int? urlAttachmentTitleMaxLine,
int? urlAttachmentTextMaxLine,
}) {
return StreamMessageThemeData(
messageTextStyle: messageTextStyle ?? this.messageTextStyle,
@@ -128,6 +133,8 @@ class StreamMessageThemeData with Diagnosticable {
urlAttachmentTextStyle ?? this.urlAttachmentTextStyle,
urlAttachmentTitleMaxLine:
urlAttachmentTitleMaxLine ?? this.urlAttachmentTitleMaxLine,
urlAttachmentTextMaxLine:
urlAttachmentTextMaxLine ?? this.urlAttachmentTextMaxLine,
);
}
@@ -178,6 +185,14 @@ class StreamMessageThemeData with Diagnosticable {
b.urlAttachmentTitleStyle,
t,
),
urlAttachmentTitleMaxLine: IntTween(
begin: a.urlAttachmentTitleMaxLine,
end: b.urlAttachmentTitleMaxLine,
).lerp(t),
urlAttachmentTextMaxLine: IntTween(
begin: a.urlAttachmentTextMaxLine,
end: b.urlAttachmentTextMaxLine,
).lerp(t),
);
}
@@ -206,6 +221,7 @@ class StreamMessageThemeData with Diagnosticable {
urlAttachmentTitleStyle: other.urlAttachmentTitleStyle,
urlAttachmentTextStyle: other.urlAttachmentTextStyle,
urlAttachmentTitleMaxLine: other.urlAttachmentTitleMaxLine,
urlAttachmentTextMaxLine: other.urlAttachmentTextMaxLine,
);
}
@@ -229,7 +245,8 @@ class StreamMessageThemeData with Diagnosticable {
urlAttachmentHostStyle == other.urlAttachmentHostStyle &&
urlAttachmentTitleStyle == other.urlAttachmentTitleStyle &&
urlAttachmentTextStyle == other.urlAttachmentTextStyle &&
urlAttachmentTitleMaxLine == other.urlAttachmentTitleMaxLine;
urlAttachmentTitleMaxLine == other.urlAttachmentTitleMaxLine &&
urlAttachmentTextMaxLine == other.urlAttachmentTextMaxLine;
@override
int get hashCode =>
@@ -248,7 +265,8 @@ class StreamMessageThemeData with Diagnosticable {
urlAttachmentHostStyle.hashCode ^
urlAttachmentTitleStyle.hashCode ^
urlAttachmentTextStyle.hashCode ^
urlAttachmentTitleMaxLine.hashCode;
urlAttachmentTitleMaxLine.hashCode ^
urlAttachmentTextMaxLine.hashCode;
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
@@ -284,6 +302,10 @@ class StreamMessageThemeData with Diagnosticable {
..add(DiagnosticsProperty(
'urlAttachmentTitleMaxLine',
urlAttachmentTitleMaxLine,
))
..add(DiagnosticsProperty(
'urlAttachmentTextMaxLine',
urlAttachmentTextMaxLine,
));
}
}
@@ -195,15 +195,12 @@ class StreamChatThemeData {
width: 32,
),
),
messageLinksStyle: TextStyle(
color: accentColor,
),
messageLinksStyle: TextStyle(color: accentColor),
urlAttachmentBackgroundColor: colorTheme.linkBg,
urlAttachmentHostStyle: textTheme.bodyBold.copyWith(color: accentColor),
urlAttachmentTitleStyle:
textTheme.body.copyWith(fontWeight: FontWeight.w700),
urlAttachmentTextStyle:
textTheme.body.copyWith(fontWeight: FontWeight.w400),
urlAttachmentTitleStyle: textTheme.footnoteBold,
urlAttachmentTextStyle: textTheme.footnote,
urlAttachmentTitleMaxLine: 1,
),
otherMessageTheme: StreamMessageThemeData(
reactionsBackgroundColor: colorTheme.borders,
@@ -215,9 +212,7 @@ class StreamChatThemeData {
messageAuthorStyle:
textTheme.footnote.copyWith(color: colorTheme.textLowEmphasis),
repliesStyle: textTheme.footnoteBold.copyWith(color: accentColor),
messageLinksStyle: TextStyle(
color: accentColor,
),
messageLinksStyle: TextStyle(color: accentColor),
messageBackgroundColor: colorTheme.barsBg,
messageBorderColor: colorTheme.borders,
avatarTheme: StreamAvatarThemeData(
@@ -229,10 +224,9 @@ class StreamChatThemeData {
),
urlAttachmentBackgroundColor: colorTheme.linkBg,
urlAttachmentHostStyle: textTheme.bodyBold.copyWith(color: accentColor),
urlAttachmentTitleStyle:
textTheme.body.copyWith(fontWeight: FontWeight.w700),
urlAttachmentTextStyle:
textTheme.body.copyWith(fontWeight: FontWeight.w400),
urlAttachmentTitleStyle: textTheme.footnoteBold,
urlAttachmentTextStyle: textTheme.footnote,
urlAttachmentTitleMaxLine: 1,
),
messageInputTheme: StreamMessageInputThemeData(
borderRadius: BorderRadius.circular(20),