@@ -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 (dmRecipientHeaderBg, 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] .
@@ -916,8 +930,9 @@ class DateSeparator extends StatelessWidget {
916
930
917
931
final line = BorderSide (width: 0 , color: messageListTheme.dateSeparator);
918
932
919
- // TODO(#681) use different color for DM messages
920
- return ColoredBox (color: messageListTheme.streamMessageBgDefault,
933
+ final backgroundColor = messageListTheme.getMessageBackgroundColor (message);
934
+
935
+ return ColoredBox (color: backgroundColor,
921
936
child: Padding (
922
937
padding: const EdgeInsets .symmetric (vertical: 8 , horizontal: 2 ),
923
938
child: Row (children: [
@@ -958,13 +973,15 @@ class MessageItem extends StatelessWidget {
958
973
Widget build (BuildContext context) {
959
974
final message = item.message;
960
975
final messageListTheme = MessageListTheme .of (context);
976
+ final backgroundColor = messageListTheme.getMessageBackgroundColor (message);
977
+
961
978
return StickyHeaderItem (
962
979
allowOverflow: ! item.isLastInBlock,
963
980
header: header,
964
981
child: _UnreadMarker (
965
982
isRead: message.flags.contains (MessageFlag .read),
966
983
child: ColoredBox (
967
- color: messageListTheme.streamMessageBgDefault ,
984
+ color: backgroundColor ,
968
985
child: Column (children: [
969
986
MessageWithPossibleSender (item: item),
970
987
if (trailingWhitespace != null && item.isLastInBlock) SizedBox (height: trailingWhitespace! ),
0 commit comments