@@ -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
+
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] .
@@ -933,8 +947,9 @@ class DateSeparator extends StatelessWidget {
933
947
934
948
final line = BorderSide (width: 0 , color: messageListTheme.dateSeparator);
935
949
936
- // TODO(#681) use different color for DM messages
937
- return ColoredBox (color: messageListTheme.streamMessageBgDefault,
950
+ final backgroundColor = messageListTheme.getMessageBackgroundColor (message);
951
+
952
+ return ColoredBox (color: backgroundColor,
938
953
child: Padding (
939
954
padding: const EdgeInsets .symmetric (vertical: 8 , horizontal: 2 ),
940
955
child: Row (children: [
@@ -975,13 +990,15 @@ class MessageItem extends StatelessWidget {
975
990
Widget build (BuildContext context) {
976
991
final message = item.message;
977
992
final messageListTheme = MessageListTheme .of (context);
993
+ final backgroundColor = messageListTheme.getMessageBackgroundColor (message);
994
+
978
995
return StickyHeaderItem (
979
996
allowOverflow: ! item.isLastInBlock,
980
997
header: header,
981
998
child: _UnreadMarker (
982
999
isRead: message.flags.contains (MessageFlag .read),
983
1000
child: ColoredBox (
984
- color: messageListTheme.streamMessageBgDefault ,
1001
+ color: backgroundColor ,
985
1002
child: Column (children: [
986
1003
MessageWithPossibleSender (item: item),
987
1004
if (trailingWhitespace != null && item.isLastInBlock) SizedBox (height: trailingWhitespace! ),
0 commit comments