mirror of
https://github.com/Iconica-Development/flutter_chat.git
synced 2025-05-18 18:33:49 +02:00
feat: custom avatar builder
This commit is contained in:
parent
0caebe7d02
commit
f110c224a2
5 changed files with 42 additions and 35 deletions
|
@ -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(
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 ?? '',
|
||||
),
|
||||
),
|
||||
|
|
Loading…
Reference in a new issue