feat: custom avatar builder

This commit is contained in:
Stein Milder 2022-11-24 15:52:36 +01:00
parent 0caebe7d02
commit f110c224a2
5 changed files with 42 additions and 35 deletions

View file

@ -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(

View file

@ -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,
);

View file

@ -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,10 +38,10 @@ 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(
@ -54,22 +53,6 @@ class ChatDetailScreen extends StatelessWidget {
),
),
],
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),
),
),
),
],
],
),
),
),

View file

@ -70,9 +70,12 @@ class _ChatScreenState extends State<ChatScreen> {
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,

View file

@ -82,7 +82,10 @@ class _NewChatScreenState extends State<NewChatScreen> {
GestureDetector(
child: widget.options.chatRowContainerBuilder(
ChatRow(
image: user.imageUrl,
avatar: widget.options.userAvatarBuilder(
user,
40.0,
),
title: user.name ?? '',
),
),