chat_ui_kit
1.1.0
이 플러터 패키지는 기본 구조와 최신 채팅 UI를 신속하게 구축 할 수있는 일련의 도구를 제공합니다. 모든 사람의 기대를 충족시키는 하나의 위젯으로 모두 찾아 내려고하는 대신 예로 사용하고 마음대로 사용자 정의해야 할 도우미가 제공됩니다.

먼저 다음 줄을 pubspec.yaml 종속성에 추가하십시오.
chat_ui_kit : ^ [latest_version]다음으로 기본 모델을 확장하도록 모델을 설정하십시오.
class ChatMessage extends MessageBase {
//...
ChatUser author;
String text;
@override
DateTime get createdAt =>
DateTime . fromMillisecondsSinceEpoch (creationTimestamp);
@override
String get id => messageId;
@override
String get url => attachment;
@override
MessageBaseType get messageType {
//...
}
} class ChatUser extends UserBase {
//...
@override
String get name => username;
@override
String get id => userid;
@override
String get avatar => avatarURL;
} class Chat extends ChatBase {
//...
List < ChatUser > members;
ChatMessage lastMessage;
@override
int get unreadCount => chat.unreadCount;
@override
String get name {
if ((chat ? .name ?? null ). isNotNullOrEmpty ()) return chat.name;
return membersWithoutSelf. map ((e) => e.username). toList (). join ( ", " );
}
@override
String get id => chat ? .id;
@override
List < ChatUser > get membersWithoutSelf {
List < ChatUser > membersWithoutSelf = [];
final localUserId = chat ? .localUserId ??
FirebaseAuth .instance.currentUser ? .uid;
for ( ChatUser chatUser in members) {
if (localUserId != chatUser.userid) membersWithoutSelf. add (chatUser);
}
return membersWithoutSelf;
}
} ChatsListController controller = ChatsListController ();
ChatsList (
controller : _controller,
appUserId : _currentUser.id,
scrollHandler : _handleScrollEvent,
groupAvatarStyle : GroupAvatarStyle (withSeparator : true ),
builders : ChatsListTileBuilders (
groupAvatarBuilder :
(context, imageIndex, itemIndex, size, item) {
final chat = item as Chat ;
return CachedNetworkImage (
cacheManager : CustomCacheManager (),
imageUrl : chat.membersWithoutSelf[imageIndex].avatar,
width : size.width,
height : size.height,
fit : BoxFit .cover,
errorWidget : (ctx, url, val) =>
AppErrorWidget ( true , size : size));
},
lastMessageBuilder : _buildLastMessage,
wrapper : _buildTileWrapper,
dateBuilder : (context, date) => Padding (
padding : EdgeInsets . only (left : 16 ),
child : Text ( DateFormatter . getVerboseDateTimeRepresentation (
context, date)))))
@override
void dispose () {
_controller. dispose ();
super . dispose ();
} final MessagesListController _controller = MessagesListController ();
@override
void initState () {
_controller.selectionEventStream. listen ((event) {
setState (() {
_selectedItemsCount = event.currentSelectionCount;
});
});
super . initState ();
}
Widget _buildMessagesList () {
IncomingMessageTileBuilders incomingBuilders = _isGroupChat
? IncomingMessageTileBuilders (
bodyBuilder : (context, index, item, messagePosition) =>
_buildMessageBody (context, index, item, messagePosition,
MessageFlow .incoming),
avatarBuilder : (context, index, item, messagePosition) {
final _chatMessage = item as ChatMessage ;
return Padding (
padding :
EdgeInsets . only (right : 16 ),
child : _buildAvatarWithScore (_chatMessage.author));
})
: IncomingMessageTileBuilders (
bodyBuilder : (context, index, item, messagePosition) =>
_buildMessageBody (context, index, item, messagePosition,
MessageFlow .incoming),
titleBuilder : null );
return Expanded (
child : MessagesList (
controller : _controller,
appUserId : _currentUser.id,
useCustomTile : (i, item, pos) {
final msg = item as ChatMessage ;
return msg.isTypeEvent;
},
messagePosition : _messagePosition,
builders : MessageTileBuilders (
customTileBuilder : _buildEventMessage,
customDateBuilder : _buildDate,
incomingMessageBuilders : incomingBuilders,
outgoingMessageBuilders : OutgoingMessageTileBuilders (
bodyBuilder : (context, index, item, messagePosition) =>
_buildMessageBody (context, index, item,
messagePosition, MessageFlow .outgoing)))));
}
@override
void dispose () {
_controller. dispose ();
super . dispose ();
}질문을하기 전에 수업 상감 문서를 찾아보십시오. PR은 매우 환영합니다!