From 4a2447bf15dcd43928c9e35d3532c366a4e76189 Mon Sep 17 00:00:00 2001 From: guo Date: Tue, 3 Jan 2023 19:10:34 +0800 Subject: [PATCH] fixed message bubble avatar splash --- lib/components/chat/message_item.dart | 23 ++++++++++++----------- lib/screens/chat/messages.dart | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/components/chat/message_item.dart b/lib/components/chat/message_item.dart index 0d0ad12e4..a464c906a 100644 --- a/lib/components/chat/message_item.dart +++ b/lib/components/chat/message_item.dart @@ -19,9 +19,9 @@ import 'package:nmobile/utils/time.dart'; class ChatMessageItem extends BaseStateFulWidget { final MessageSchema message; + // final ContactSchema? contact; // final TopicSchema? topic; // final PrivateGroupSchema? privateGroup; - final ContactSchema? contact; final MessageSchema? prevMessage; final MessageSchema? nextMessage; final Function(ContactSchema, MessageSchema)? onAvatarLonePress; @@ -29,9 +29,9 @@ class ChatMessageItem extends BaseStateFulWidget { ChatMessageItem({ required this.message, + // required this.contact, // required this.topic, // required this.privateGroup, - required this.contact, this.prevMessage, this.nextMessage, this.onAvatarLonePress, @@ -62,16 +62,17 @@ class _ChatMessageItemState extends BaseStateFulWidgetState { @override void onRefreshArguments() { - _contact = widget.contact; // topic/group no contact if ((_contact == null) || (_contact?.clientAddress != widget.message.from)) { - contactCommon.queryByClientAddress(widget.message.from).then((ContactSchema? value) async { + contactCommon.queryByClientAddress(widget.message.from).then((value) async { if (value == null) { value = await contactCommon.addByType(widget.message.from, ContactType.none, notify: true, checkDuplicated: false); } - setState(() { - _contact = value; - }); + if ((_contact == null) || ((_contact?.clientAddress != value?.clientAddress) && (value != null))) { + setState(() { + _contact = value; + }); + } }); } } @@ -292,7 +293,7 @@ class _ChatMessageItemState extends BaseStateFulWidgetState { mainAxisAlignment: MainAxisAlignment.center, children: [ Label( - widget.message.isOutbound ? Global.locale((s) => s.you, ctx: context) : (this.widget.contact?.displayName ?? " "), + widget.message.isOutbound ? Global.locale((s) => s.you, ctx: context) : (this._contact?.displayName ?? " "), type: LabelType.bodyRegular, fontWeight: FontWeight.bold, ), @@ -312,7 +313,7 @@ class _ChatMessageItemState extends BaseStateFulWidgetState { type: LabelType.bodyRegular, ), onTap: () { - ContactProfileScreen.go(context, schema: this.widget.contact); + ContactProfileScreen.go(context, schema: this._contact); }, ), ], @@ -331,7 +332,7 @@ class _ChatMessageItemState extends BaseStateFulWidgetState { mainAxisSize: MainAxisSize.min, children: [ Label( - widget.message.isOutbound ? Global.locale((s) => s.you, ctx: context) : (this.widget.contact?.displayName ?? " "), + widget.message.isOutbound ? Global.locale((s) => s.you, ctx: context) : (this._contact?.displayName ?? " "), maxWidth: Global.screenWidth() * 0.3, type: LabelType.bodyRegular, fontWeight: FontWeight.bold, @@ -351,7 +352,7 @@ class _ChatMessageItemState extends BaseStateFulWidgetState { type: LabelType.bodyRegular, ), onTap: () { - ContactProfileScreen.go(context, schema: this.widget.contact); + ContactProfileScreen.go(context, schema: this._contact); }, ), ], diff --git a/lib/screens/chat/messages.dart b/lib/screens/chat/messages.dart index f66ec48b6..164902758 100644 --- a/lib/screens/chat/messages.dart +++ b/lib/screens/chat/messages.dart @@ -765,9 +765,9 @@ class _ChatMessagesScreenState extends BaseStateFulWidgetState= 0 ? _messages[index - 1] : null, nextMessage: (index + 1) < _messages.length ? _messages[index + 1] : null, onAvatarLonePress: (ContactSchema contact, _) {