@@ -30,6 +30,7 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
30
30
static final light = MessageListTheme ._(
31
31
dateSeparator: Colors .black,
32
32
dateSeparatorText: const HSLColor .fromAHSL (0.75 , 0 , 0 , 0.15 ).toColor (),
33
+ dmMessageBgDefault: const HSLColor .fromAHSL (1 , 45 , 0.20 , 0.96 ).toColor (),
33
34
dmRecipientHeaderBg: const HSLColor .fromAHSL (1 , 46 , 0.35 , 0.93 ).toColor (),
34
35
messageTimestamp: const HSLColor .fromAHSL (0.8 , 0 , 0 , 0.2 ).toColor (),
35
36
recipientHeaderText: const HSLColor .fromAHSL (1 , 0 , 0 , 0.15 ).toColor (),
@@ -55,6 +56,7 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
55
56
static final dark = MessageListTheme ._(
56
57
dateSeparator: Colors .white,
57
58
dateSeparatorText: const HSLColor .fromAHSL (0.75 , 0 , 0 , 1 ).toColor (),
59
+ dmMessageBgDefault: const HSLColor .fromAHSL (1 , 46 , 0.07 , 0.16 ).toColor (),
58
60
dmRecipientHeaderBg: const HSLColor .fromAHSL (1 , 46 , 0.15 , 0.2 ).toColor (),
59
61
messageTimestamp: const HSLColor .fromAHSL (0.8 , 0 , 0 , 0.85 ).toColor (),
60
62
recipientHeaderText: const HSLColor .fromAHSL (0.8 , 0 , 0 , 1 ).toColor (),
@@ -79,6 +81,7 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
79
81
MessageListTheme ._({
80
82
required this .dateSeparator,
81
83
required this .dateSeparatorText,
84
+ required this .dmMessageBgDefault,
82
85
required this .dmRecipientHeaderBg,
83
86
required this .messageTimestamp,
84
87
required this .recipientHeaderText,
@@ -103,6 +106,7 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
103
106
104
107
final Color dateSeparator;
105
108
final Color dateSeparatorText;
109
+ final Color dmMessageBgDefault;
106
110
final Color dmRecipientHeaderBg;
107
111
final Color messageTimestamp;
108
112
final Color recipientHeaderText;
@@ -118,6 +122,7 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
118
122
MessageListTheme copyWith ({
119
123
Color ? dateSeparator,
120
124
Color ? dateSeparatorText,
125
+ Color ? dmMessageBgDefault,
121
126
Color ? dmRecipientHeaderBg,
122
127
Color ? messageTimestamp,
123
128
Color ? recipientHeaderText,
@@ -132,6 +137,7 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
132
137
return MessageListTheme ._(
133
138
dateSeparator: dateSeparator ?? this .dateSeparator,
134
139
dateSeparatorText: dateSeparatorText ?? this .dateSeparatorText,
140
+ dmMessageBgDefault: dmMessageBgDefault ?? this .dmMessageBgDefault,
135
141
dmRecipientHeaderBg: dmRecipientHeaderBg ?? this .dmRecipientHeaderBg,
136
142
messageTimestamp: messageTimestamp ?? this .messageTimestamp,
137
143
recipientHeaderText: recipientHeaderText ?? this .recipientHeaderText,
@@ -153,6 +159,7 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
153
159
return MessageListTheme ._(
154
160
dateSeparator: Color .lerp (dateSeparator, other.dateSeparator, t)! ,
155
161
dateSeparatorText: Color .lerp (dateSeparatorText, other.dateSeparatorText, t)! ,
162
+ dmMessageBgDefault: Color .lerp (dmMessageBgDefault, other.dmMessageBgDefault, t)! ,
156
163
dmRecipientHeaderBg: Color .lerp (streamMessageBgDefault, other.dmRecipientHeaderBg, t)! ,
157
164
messageTimestamp: Color .lerp (messageTimestamp, other.messageTimestamp, t)! ,
158
165
recipientHeaderText: Color .lerp (recipientHeaderText, other.recipientHeaderText, t)! ,
@@ -165,6 +172,13 @@ class MessageListTheme extends ThemeExtension<MessageListTheme> {
165
172
unsubscribedStreamRecipientHeaderBg: Color .lerp (unsubscribedStreamRecipientHeaderBg, other.unsubscribedStreamRecipientHeaderBg, t)! ,
166
173
);
167
174
}
175
+ /// Helper function to get the background color for a message based on its type.
176
+ Color getMessageBackgroundColor (Message message) {
177
+ return switch (message) {
178
+ StreamMessage () => streamMessageBgDefault,
179
+ DmMessage () => dmMessageBgDefault,
180
+ };
181
+ }
168
182
}
169
183
170
184
/// The interface for the state of a [MessageListPage] .
@@ -909,8 +923,9 @@ class DateSeparator extends StatelessWidget {
909
923
910
924
final line = BorderSide (width: 0 , color: messageListTheme.dateSeparator);
911
925
912
- // TODO(#681) use different color for DM messages
913
- return ColoredBox (color: messageListTheme.streamMessageBgDefault,
926
+ final backgroundColor = messageListTheme.getMessageBackgroundColor (message);
927
+
928
+ return ColoredBox (color: backgroundColor,
914
929
child: Padding (
915
930
padding: const EdgeInsets .symmetric (vertical: 8 , horizontal: 2 ),
916
931
child: Row (children: [
@@ -951,13 +966,15 @@ class MessageItem extends StatelessWidget {
951
966
Widget build (BuildContext context) {
952
967
final message = item.message;
953
968
final messageListTheme = MessageListTheme .of (context);
969
+ final backgroundColor = messageListTheme.getMessageBackgroundColor (message);
970
+
954
971
return StickyHeaderItem (
955
972
allowOverflow: ! item.isLastInBlock,
956
973
header: header,
957
974
child: _UnreadMarker (
958
975
isRead: message.flags.contains (MessageFlag .read),
959
976
child: ColoredBox (
960
- color: messageListTheme.streamMessageBgDefault ,
977
+ color: backgroundColor ,
961
978
child: Column (children: [
962
979
MessageWithPossibleSender (item: item),
963
980
if (trailingWhitespace != null && item.isLastInBlock) SizedBox (height: trailingWhitespace! ),
0 commit comments