···8686 /// [likeUri] The URI of the like to delete
8787 Future<void> unlikePost(AtUri likeUri);
88888989+ /// Repost a post
9090+ ///
9191+ /// [postCid] The CID of the post to repost
9292+ /// [postUri] The URI of the post to repost
9393+ Future<RepoStrongRef> repostPost(String postCid, AtUri postUri);
9494+9595+ /// Unrepost a post (delete the repost)
9696+ ///
9797+ /// [repostUri] The URI of the repost to delete
9898+ Future<void> unrepostPost(AtUri repostUri);
9999+89100 /// Delete a post by its URI
90101 ///
91102 /// [postUri] The URI of the post to delete
···6767 }
68686969 Future<void> _handleDoubleTapLike(PostView postData) async {
7070- final isCurrentlyLiked = postData.viewer?.like != null;
7070+ final isCurrentlyLiked = _overrideIsLiked ?? (postData.viewer?.like != null);
71717272 if (isCurrentlyLiked) {
7373 return;
···8282 // Like the post using the same logic as SideActionBar
8383 final newLike = await ref.read(likePostProvider(postData.cid, postData.uri).future);
84848585- // Update the post's viewer field with the new like reference
8585+ // Update the post's viewer field with the new like reference and increment like count
8686 final updatedPost = postData.copyWith(
8787- viewer: postData.viewer?.copyWith(like: newLike.uri) ?? Viewer(like: newLike.uri, repost: postData.viewer?.repost),
8787+ likeCount: (postData.likeCount ?? 0) + 1,
8888+ viewer: postData.viewer?.copyWith(like: newLike.uri) ?? ViewerState(like: newLike.uri, repost: postData.viewer?.repost),
8889 );
89909091 ref.read(feedProvider(widget.feed).notifier).replacePost(updatedPost);
···180181 }
181182 });
182183183183- // Get labels for the overlay
184184+ // Get labels for the overlay and use the latest post from feed state
184185 var labels = <Label>[];
185185- final feedState = ref.read(feedProvider(widget.feed));
186186+ // Use the post from feed state as it has the latest updates (e.g., after like/repost)
187187+ final currentPost = (widget.index < feedState.loadedPosts.length) ? feedState.loadedPosts[widget.index] : postData;
186188 if (widget.index < feedState.loadedPosts.length) {
187187- final post = feedState.loadedPosts[widget.index];
188188- final extraInfo = feedState.extraInfo[post.uri];
189189+ final extraInfo = feedState.extraInfo[currentPost.uri];
189190 if (extraInfo != null) {
190191 labels = extraInfo.postLabels;
191192 }
···250251 // Overlay controls - no double-tap detection, so buttons respond immediately
251252 Positioned.fill(
252253 child: PostOverlay(
253253- post: postData,
254254+ post: currentPost,
254255 feed: widget.feed,
255255- isLiked: _overrideIsLiked ?? (postData.viewer?.like != null),
256256+ isLiked: _overrideIsLiked ?? (currentPost.viewer?.like != null),
256257 labels: labels,
257258 onProfilePressed: () {
258259 _videoPlayerKey.currentState?.pauseVideo();
···261262 _videoPlayerKey.currentState?.pauseVideo();
262263 context.router.push(
263264 ProfileRoute(
264264- did: postData.author.did,
265265- initialProfile: postData.author,
265265+ did: currentPost.author.did,
266266+ initialProfile: currentPost.author,
266267 ),
267268 );
268269 },