add default channel image to theme

This commit is contained in:
Salvatore Giordano
2020-04-23 12:02:24 +02:00
parent 60f48177e4
commit 019d0aded8
5 changed files with 19 additions and 2 deletions
+7
View File
@@ -28,6 +28,13 @@ class MyApp extends StatelessWidget {
themeMode: ThemeMode.system, themeMode: ThemeMode.system,
home: Container( home: Container(
child: StreamChat( child: StreamChat(
streamChatThemeData: StreamChatThemeData(
defaultChannelImage: (context, channel) {
return Center(
child: Text('AAA'),
);
},
),
client: client, client: client,
child: ChannelListPage(), child: ChannelListPage(),
), ),
+1 -1
View File
@@ -128,7 +128,7 @@ class ChannelHeader extends StatelessWidget implements PreferredSizeWidget {
.channelHeaderTheme .channelHeaderTheme
.lastMessageAt, .lastMessageAt,
) )
: Container(); : SizedBox();
}, },
); );
} }
+2 -1
View File
@@ -111,7 +111,8 @@ class ChannelImage extends StatelessWidget {
}, },
fit: BoxFit.cover, fit: BoxFit.cover,
) )
: SizedBox(), : StreamChatTheme.of(context)
.defaultChannelImage(context, channel),
Material( Material(
color: Colors.transparent, color: Colors.transparent,
child: InkWell( child: InkWell(
+1
View File
@@ -114,6 +114,7 @@ class StreamChatState extends State<StreamChat>
final defaultTheme = StreamChatThemeData.getDefaultTheme(Theme.of(context)); final defaultTheme = StreamChatThemeData.getDefaultTheme(Theme.of(context));
final theme = defaultTheme.copyWith( final theme = defaultTheme.copyWith(
primaryColor: themeData?.primaryColor, primaryColor: themeData?.primaryColor,
defaultChannelImage: themeData?.defaultChannelImage,
channelTheme: defaultTheme.channelTheme.copyWith( channelTheme: defaultTheme.channelTheme.copyWith(
channelHeaderTheme: channelHeaderTheme:
defaultTheme.channelTheme.channelHeaderTheme.copyWith( defaultTheme.channelTheme.channelHeaderTheme.copyWith(
+8
View File
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:stream_chat/stream_chat.dart';
import 'package:stream_chat_flutter/src/channel_header.dart'; import 'package:stream_chat_flutter/src/channel_header.dart';
import 'package:stream_chat_flutter/src/channel_preview.dart'; import 'package:stream_chat_flutter/src/channel_preview.dart';
import 'package:stream_chat_flutter/src/message_input.dart'; import 'package:stream_chat_flutter/src/message_input.dart';
@@ -50,6 +51,9 @@ class StreamChatThemeData {
/// Theme of other users messages /// Theme of other users messages
final MessageTheme otherMessageTheme; final MessageTheme otherMessageTheme;
/// The widget that will be built when the channel image is unavailable
final Widget Function(BuildContext, Channel) defaultChannelImage;
/// Create a theme from scratch /// Create a theme from scratch
StreamChatThemeData({ StreamChatThemeData({
this.primaryColor, this.primaryColor,
@@ -59,6 +63,7 @@ class StreamChatThemeData {
this.channelTheme, this.channelTheme,
this.otherMessageTheme, this.otherMessageTheme,
this.ownMessageTheme, this.ownMessageTheme,
this.defaultChannelImage,
}); });
/// Create a theme from a Material [Theme] /// Create a theme from a Material [Theme]
@@ -97,11 +102,13 @@ class StreamChatThemeData {
ChannelTheme channelTheme, ChannelTheme channelTheme,
MessageTheme ownMessageTheme, MessageTheme ownMessageTheme,
MessageTheme otherMessageTheme, MessageTheme otherMessageTheme,
Widget Function(BuildContext, Channel) defaultChannelImage,
}) => }) =>
StreamChatThemeData( StreamChatThemeData(
primaryColor: primaryColor ?? this.primaryColor, primaryColor: primaryColor ?? this.primaryColor,
secondaryColor: secondaryColor ?? this.secondaryColor, secondaryColor: secondaryColor ?? this.secondaryColor,
accentColor: accentColor ?? this.accentColor, accentColor: accentColor ?? this.accentColor,
defaultChannelImage: defaultChannelImage ?? this.defaultChannelImage,
channelPreviewTheme: channelPreviewTheme?.copyWith( channelPreviewTheme: channelPreviewTheme?.copyWith(
title: title:
channelPreviewTheme.title ?? this.channelPreviewTheme.title, channelPreviewTheme.title ?? this.channelPreviewTheme.title,
@@ -170,6 +177,7 @@ class StreamChatThemeData {
return StreamChatThemeData( return StreamChatThemeData(
accentColor: accentColor, accentColor: accentColor,
primaryColor: isDark ? Colors.black : Colors.white, primaryColor: isDark ? Colors.black : Colors.white,
defaultChannelImage: (context, channel) => SizedBox(),
channelPreviewTheme: ChannelPreviewTheme( channelPreviewTheme: ChannelPreviewTheme(
avatarTheme: AvatarTheme( avatarTheme: AvatarTheme(
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),