From f110c224a273a979507ca9bc078144a8f9e43a3f Mon Sep 17 00:00:00 2001 From: Stein Milder Date: Thu, 24 Nov 2022 15:52:36 +0100 Subject: [PATCH] feat: custom avatar builder --- .../lib/src/components/chat_row.dart | 6 +-- .../lib/src/config/chat_options.dart | 18 +++++++++ .../lib/src/screens/chat_detail_screen.dart | 39 ++++++------------- .../lib/src/screens/chat_screen.dart | 9 +++-- .../lib/src/screens/new_chat_screen.dart | 5 ++- 5 files changed, 42 insertions(+), 35 deletions(-) diff --git a/packages/flutter_community_chat_view/lib/src/components/chat_row.dart b/packages/flutter_community_chat_view/lib/src/components/chat_row.dart index bc0cb44..73ec92e 100644 --- a/packages/flutter_community_chat_view/lib/src/components/chat_row.dart +++ b/packages/flutter_community_chat_view/lib/src/components/chat_row.dart @@ -8,13 +8,13 @@ import 'package:flutter_community_chat_view/src/components/chat_image.dart'; class ChatRow extends StatelessWidget { const ChatRow({ required this.title, - this.image, this.lastUsed, this.subTitle, + this.avatar, super.key, }); final String title; - final String? image; + final Widget? avatar; final String? subTitle; final String? lastUsed; @@ -24,7 +24,7 @@ class ChatRow extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(left: 10.0), - child: ChatImage(image: image), + child: avatar, ), Expanded( child: Padding( diff --git a/packages/flutter_community_chat_view/lib/src/config/chat_options.dart b/packages/flutter_community_chat_view/lib/src/config/chat_options.dart index 62f44c8..9d56ae5 100644 --- a/packages/flutter_community_chat_view/lib/src/config/chat_options.dart +++ b/packages/flutter_community_chat_view/lib/src/config/chat_options.dart @@ -3,7 +3,9 @@ // SPDX-License-Identifier: BSD-3-Clause import 'package:flutter/material.dart'; +import 'package:flutter_community_chat_interface/flutter_community_chat_interface.dart'; import 'package:flutter_community_chat_view/flutter_community_chat_view.dart'; +import 'package:flutter_community_chat_view/src/components/chat_image.dart'; class ChatOptions { const ChatOptions({ @@ -13,6 +15,7 @@ class ChatOptions { this.imagePickerContainerBuilder = _createImagePickerContainer, this.closeImagePickerButtonBuilder = _createCloseImagePickerButton, this.scaffoldBuilder = _createScaffold, + this.userAvatarBuilder = _createUserAvatar, }); final ButtonBuilder newChatButtonBuilder; @@ -21,6 +24,7 @@ class ChatOptions { final ContainerBuilder imagePickerContainerBuilder; final ButtonBuilder closeImagePickerButtonBuilder; final ScaffoldBuilder scaffoldBuilder; + final UserAvatarBuilder userAvatarBuilder; } Widget _createNewChatButton( @@ -93,6 +97,15 @@ Scaffold _createScaffold( body: body, ); +Widget _createUserAvatar( + ChatUserModel user, + double size, +) => + ChatImage( + image: user.imageUrl, + size: size, + ); + typedef ButtonBuilder = Widget Function( BuildContext context, VoidCallback onPressed, @@ -113,3 +126,8 @@ typedef ScaffoldBuilder = Scaffold Function( AppBar appBar, Widget body, ); + +typedef UserAvatarBuilder = Widget Function( + ChatUserModel user, + double size, +); diff --git a/packages/flutter_community_chat_view/lib/src/screens/chat_detail_screen.dart b/packages/flutter_community_chat_view/lib/src/screens/chat_detail_screen.dart index ea37477..55e21d1 100644 --- a/packages/flutter_community_chat_view/lib/src/screens/chat_detail_screen.dart +++ b/packages/flutter_community_chat_view/lib/src/screens/chat_detail_screen.dart @@ -7,7 +7,6 @@ import 'package:flutter_community_chat_interface/flutter_community_chat_interfac import 'package:flutter_community_chat_view/flutter_community_chat_view.dart'; import 'package:flutter_community_chat_view/src/components/chat_bottom.dart'; import 'package:flutter_community_chat_view/src/components/chat_detail_row.dart'; -import 'package:flutter_community_chat_view/src/components/chat_image.dart'; class ChatDetailScreen extends StatelessWidget { const ChatDetailScreen({ @@ -39,36 +38,20 @@ class ChatDetailScreen extends StatelessWidget { child: Row( mainAxisSize: MainAxisSize.min, children: [ - if (chat is PersonalChatModel) ...[ - ChatImage( - image: (chat as PersonalChatModel).user.imageUrl, - size: 36.0, + if (chat is PersonalChatModel) + options.userAvatarBuilder( + (chat as PersonalChatModel).user, + 36.0, ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 15.5), - child: Text( - (chat as PersonalChatModel).user.name ?? '', - style: const TextStyle(fontSize: 18), - ), + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 15.5), + child: Text( + (chat as PersonalChatModel).user.name ?? '', + style: const TextStyle(fontSize: 18), ), ), - ], - if (chat is GroupChatModel) ...[ - ChatImage( - image: (chat as GroupChatModel).imageUrl, - size: 36.0, - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 15.5), - child: Text( - (chat as GroupChatModel).title, - style: const TextStyle(fontSize: 18), - ), - ), - ), - ], + ), ], ), ), diff --git a/packages/flutter_community_chat_view/lib/src/screens/chat_screen.dart b/packages/flutter_community_chat_view/lib/src/screens/chat_screen.dart index 372be88..b45a04b 100644 --- a/packages/flutter_community_chat_view/lib/src/screens/chat_screen.dart +++ b/packages/flutter_community_chat_view/lib/src/screens/chat_screen.dart @@ -70,9 +70,12 @@ class _ChatScreenState extends State { onTap: () => widget.onPressChat(chat), child: widget.options.chatRowContainerBuilder( ChatRow( - image: chat is PersonalChatModel - ? chat.user.imageUrl - : (chat as GroupChatModel).imageUrl, + avatar: chat is PersonalChatModel + ? widget.options.userAvatarBuilder( + chat.user, + 40.0, + ) + : Container(), title: chat is PersonalChatModel ? chat.user.name ?? '' : (chat as GroupChatModel).title, diff --git a/packages/flutter_community_chat_view/lib/src/screens/new_chat_screen.dart b/packages/flutter_community_chat_view/lib/src/screens/new_chat_screen.dart index d4612a9..b097a68 100644 --- a/packages/flutter_community_chat_view/lib/src/screens/new_chat_screen.dart +++ b/packages/flutter_community_chat_view/lib/src/screens/new_chat_screen.dart @@ -82,7 +82,10 @@ class _NewChatScreenState extends State { GestureDetector( child: widget.options.chatRowContainerBuilder( ChatRow( - image: user.imageUrl, + avatar: widget.options.userAvatarBuilder( + user, + 40.0, + ), title: user.name ?? '', ), ),