From c6f5815e1b2f77bad8c15ce0c130576706c12893 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 28 Feb 2020 11:18:34 +0100 Subject: [PATCH] add more logic to copywith methods --- lib/src/stream_chat_theme.dart | 61 +++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/lib/src/stream_chat_theme.dart b/lib/src/stream_chat_theme.dart index d7ab1b4e..c3db901f 100644 --- a/lib/src/stream_chat_theme.dart +++ b/lib/src/stream_chat_theme.dart @@ -42,7 +42,7 @@ class StreamChatThemeData { factory StreamChatThemeData.fromTheme(ThemeData theme) { final defaultTheme = getDefaultTheme(theme); - return StreamChatThemeData( + return defaultTheme.copyWith( accentColor: theme.accentColor, primaryColor: theme.colorScheme.primary, secondaryColor: theme.colorScheme.secondary, @@ -72,9 +72,52 @@ class StreamChatThemeData { primaryColor: primaryColor ?? this.primaryColor, secondaryColor: secondaryColor ?? this.secondaryColor, accentColor: accentColor ?? this.accentColor, - channelPreviewTheme: channelPreviewTheme ?? this.channelPreviewTheme, - channelTheme: channelTheme ?? this.channelTheme, - messageTheme: messageTheme ?? this.messageTheme, + channelPreviewTheme: channelPreviewTheme?.copyWith( + title: + channelPreviewTheme.title ?? this.channelPreviewTheme.title, + subtitle: channelPreviewTheme.subtitle ?? + this.channelPreviewTheme.subtitle, + lastMessageAt: channelPreviewTheme.lastMessageAt ?? + this.channelPreviewTheme.lastMessageAt, + avatarTheme: channelPreviewTheme.avatarTheme ?? + this.channelPreviewTheme.avatarTheme, + ) ?? + this.channelPreviewTheme, + channelTheme: channelTheme?.copyWith( + channelHeaderTheme: channelTheme.channelHeaderTheme ?? + this.channelTheme.channelHeaderTheme, + messageInputButtonIconTheme: + channelTheme.messageInputButtonIconTheme ?? + this.channelTheme.messageInputButtonIconTheme, + messageInputButtonTheme: channelTheme.messageInputButtonTheme ?? + this.channelTheme.messageInputButtonTheme, + inputGradient: + channelTheme.inputGradient ?? this.channelTheme.inputGradient, + inputBackground: channelTheme.inputBackground ?? + this.channelTheme.inputBackground, + ) ?? + this.channelTheme, + messageTheme: messageTheme?.copyWith( + messageText: + messageTheme?.messageText ?? this.messageTheme.messageText, + messageAuthor: messageTheme?.messageAuthor ?? + this.messageTheme.messageAuthor, + messageMention: messageTheme?.messageMention ?? + this.messageTheme.messageMention, + createdAt: messageTheme?.createdAt ?? this.messageTheme.createdAt, + replies: messageTheme?.replies ?? this.messageTheme.replies, + fontFamily: + messageTheme?.fontFamily ?? this.messageTheme.fontFamily, + ownMessageBackgroundColor: + messageTheme?.ownMessageBackgroundColor ?? + this.messageTheme.ownMessageBackgroundColor, + otherMessageBackgroundColor: + messageTheme?.otherMessageBackgroundColor ?? + this.messageTheme.otherMessageBackgroundColor, + avatarTheme: + messageTheme?.avatarTheme ?? this.messageTheme.avatarTheme, + ) ?? + this.messageTheme, ); static StreamChatThemeData getDefaultTheme(ThemeData theme) { @@ -182,7 +225,15 @@ class ChannelTheme { Color inputBackground, }) => ChannelTheme( - channelHeaderTheme: channelHeaderTheme ?? this.channelHeaderTheme, + channelHeaderTheme: channelHeaderTheme?.copyWith( + title: channelHeaderTheme?.title ?? this.channelHeaderTheme.title, + lastMessageAt: channelHeaderTheme?.lastMessageAt ?? + this.channelHeaderTheme.lastMessageAt, + avatarTheme: channelHeaderTheme?.avatarTheme ?? + this.channelHeaderTheme.avatarTheme, + color: channelHeaderTheme?.color ?? this.channelHeaderTheme.color, + ) ?? + this.channelHeaderTheme, messageInputButtonIconTheme: messageInputButtonIconTheme ?? this.messageInputButtonIconTheme, messageInputButtonTheme: