Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ class _MessageHolderState extends CustomState<MessageHolder, void, MessageWidget
@override
Widget build(BuildContext context) {
controller.built = true;
// Gesture callbacks can run while their element is being deactivated.
// Cache this inherited-state lookup during build instead of consulting a
// stale BuildContext from drag update/end/cancel callbacks.
final isInReplyScope = ReplyScope.maybeOf(context) != null;
final stickers = message.associatedMessages.where((e) => e.associatedMessageType == "sticker");
final reactions = message.associatedMessages.where((e) => ReactionTypes.toList().contains(e.associatedMessageType?.replaceAll("-", "")));
Iterable<Message> stickersForPart(int part) {
Expand Down Expand Up @@ -440,7 +444,7 @@ class _MessageHolderState extends CustomState<MessageHolder, void, MessageWidget
child: GestureDetector(
behavior: HitTestBehavior.deferToChild,
onHorizontalDragUpdate: !canSwipeToReply || isEditing(e.part) ? null : (details) {
if (ReplyScope.maybeOf(context) != null) return;
if (isInReplyScope) return;
final offset = replyOffsets[index];
offset.value += details.delta.dx * 0.5;
if (message.isFromMe!) {
Expand All @@ -456,15 +460,15 @@ class _MessageHolderState extends CustomState<MessageHolder, void, MessageWidget
}
},
onHorizontalDragEnd: !canSwipeToReply || isEditing(e.part) ? null : (details) {
if (ReplyScope.maybeOf(context) != null) return;
if (isInReplyScope) return;
final offset = replyOffsets[index];
if (offset.value.abs() >= SlideToReply.replyThreshold) {
widget.cvController.replyToMessage = Tuple2(message, index);
}
offset.value = 0;
},
onHorizontalDragCancel: !canSwipeToReply || isEditing(e.part) ? null : () {
if (ReplyScope.maybeOf(context) != null) return;
if (isInReplyScope) return;
replyOffsets[index].value = 0;
},
child: Builder(builder: (context) {
Expand Down