mirror of
https://github.com/Iconica-Development/flutter_chat.git
synced 2025-05-19 10:53:51 +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 {
|
class ChatRow extends StatelessWidget {
|
||||||
const ChatRow({
|
const ChatRow({
|
||||||
required this.title,
|
required this.title,
|
||||||
this.image,
|
|
||||||
this.lastUsed,
|
this.lastUsed,
|
||||||
this.subTitle,
|
this.subTitle,
|
||||||
|
this.avatar,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
final String title;
|
final String title;
|
||||||
final String? image;
|
final Widget? avatar;
|
||||||
final String? subTitle;
|
final String? subTitle;
|
||||||
final String? lastUsed;
|
final String? lastUsed;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class ChatRow extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 10.0),
|
padding: const EdgeInsets.only(left: 10.0),
|
||||||
child: ChatImage(image: image),
|
child: avatar,
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
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/flutter_community_chat_view.dart';
|
||||||
|
import 'package:flutter_community_chat_view/src/components/chat_image.dart';
|
||||||
|
|
||||||
class ChatOptions {
|
class ChatOptions {
|
||||||
const ChatOptions({
|
const ChatOptions({
|
||||||
|
@ -13,6 +15,7 @@ class ChatOptions {
|
||||||
this.imagePickerContainerBuilder = _createImagePickerContainer,
|
this.imagePickerContainerBuilder = _createImagePickerContainer,
|
||||||
this.closeImagePickerButtonBuilder = _createCloseImagePickerButton,
|
this.closeImagePickerButtonBuilder = _createCloseImagePickerButton,
|
||||||
this.scaffoldBuilder = _createScaffold,
|
this.scaffoldBuilder = _createScaffold,
|
||||||
|
this.userAvatarBuilder = _createUserAvatar,
|
||||||
});
|
});
|
||||||
|
|
||||||
final ButtonBuilder newChatButtonBuilder;
|
final ButtonBuilder newChatButtonBuilder;
|
||||||
|
@ -21,6 +24,7 @@ class ChatOptions {
|
||||||
final ContainerBuilder imagePickerContainerBuilder;
|
final ContainerBuilder imagePickerContainerBuilder;
|
||||||
final ButtonBuilder closeImagePickerButtonBuilder;
|
final ButtonBuilder closeImagePickerButtonBuilder;
|
||||||
final ScaffoldBuilder scaffoldBuilder;
|
final ScaffoldBuilder scaffoldBuilder;
|
||||||
|
final UserAvatarBuilder userAvatarBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _createNewChatButton(
|
Widget _createNewChatButton(
|
||||||
|
@ -93,6 +97,15 @@ Scaffold _createScaffold(
|
||||||
body: body,
|
body: body,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Widget _createUserAvatar(
|
||||||
|
ChatUserModel user,
|
||||||
|
double size,
|
||||||
|
) =>
|
||||||
|
ChatImage(
|
||||||
|
image: user.imageUrl,
|
||||||
|
size: size,
|
||||||
|
);
|
||||||
|
|
||||||
typedef ButtonBuilder = Widget Function(
|
typedef ButtonBuilder = Widget Function(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
VoidCallback onPressed,
|
VoidCallback onPressed,
|
||||||
|
@ -113,3 +126,8 @@ typedef ScaffoldBuilder = Scaffold Function(
|
||||||
AppBar appBar,
|
AppBar appBar,
|
||||||
Widget body,
|
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/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_bottom.dart';
|
||||||
import 'package:flutter_community_chat_view/src/components/chat_detail_row.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 {
|
class ChatDetailScreen extends StatelessWidget {
|
||||||
const ChatDetailScreen({
|
const ChatDetailScreen({
|
||||||
|
@ -39,10 +38,10 @@ class ChatDetailScreen extends StatelessWidget {
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
if (chat is PersonalChatModel) ...[
|
if (chat is PersonalChatModel)
|
||||||
ChatImage(
|
options.userAvatarBuilder(
|
||||||
image: (chat as PersonalChatModel).user.imageUrl,
|
(chat as PersonalChatModel).user,
|
||||||
size: 36.0,
|
36.0,
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Padding(
|
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),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -70,9 +70,12 @@ class _ChatScreenState extends State<ChatScreen> {
|
||||||
onTap: () => widget.onPressChat(chat),
|
onTap: () => widget.onPressChat(chat),
|
||||||
child: widget.options.chatRowContainerBuilder(
|
child: widget.options.chatRowContainerBuilder(
|
||||||
ChatRow(
|
ChatRow(
|
||||||
image: chat is PersonalChatModel
|
avatar: chat is PersonalChatModel
|
||||||
? chat.user.imageUrl
|
? widget.options.userAvatarBuilder(
|
||||||
: (chat as GroupChatModel).imageUrl,
|
chat.user,
|
||||||
|
40.0,
|
||||||
|
)
|
||||||
|
: Container(),
|
||||||
title: chat is PersonalChatModel
|
title: chat is PersonalChatModel
|
||||||
? chat.user.name ?? ''
|
? chat.user.name ?? ''
|
||||||
: (chat as GroupChatModel).title,
|
: (chat as GroupChatModel).title,
|
||||||
|
|
|
@ -82,7 +82,10 @@ class _NewChatScreenState extends State<NewChatScreen> {
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
child: widget.options.chatRowContainerBuilder(
|
child: widget.options.chatRowContainerBuilder(
|
||||||
ChatRow(
|
ChatRow(
|
||||||
image: user.imageUrl,
|
avatar: widget.options.userAvatarBuilder(
|
||||||
|
user,
|
||||||
|
40.0,
|
||||||
|
),
|
||||||
title: user.name ?? '',
|
title: user.name ?? '',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue