diff --git a/lib/community/widgets/post_card.dart b/lib/community/widgets/post_card.dart index ae82d4793..56d45caf6 100644 --- a/lib/community/widgets/post_card.dart +++ b/lib/community/widgets/post_card.dart @@ -257,7 +257,6 @@ class _PostCardState extends State { : PostCardViewComfortable( postViewMedia: widget.postViewMedia, hideThumbnails: state.hideThumbnails, - showThumbnailPreviewOnRight: state.showThumbnailPreviewOnRight, hideNsfwPreviews: state.hideNsfwPreviews, markPostReadOnMediaView: state.markPostReadOnMediaView, feedType: widget.feedType, diff --git a/lib/community/widgets/post_card_actions.dart b/lib/community/widgets/post_card_actions.dart index 7caa7e162..73fc78dd3 100644 --- a/lib/community/widgets/post_card_actions.dart +++ b/lib/community/widgets/post_card_actions.dart @@ -2,22 +2,27 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:thunder/core/auth/bloc/auth_bloc.dart'; import 'package:thunder/thunder/bloc/thunder_bloc.dart'; +/// Represents the actions that can be performed on a post when using the card view. class PostCardActions extends StatelessWidget { - // Callback functions - final Function(int) onVoteAction; - final Function(bool) onSaveAction; + /// The current vote for the post. This can be 1 for upvote, -1 for downvote, or 0 for no vote. + final int voteType; - final int postId; + /// Whether the post is saved or not. final bool saved; - final int voteType; + + /// The callback function to execute when a vote action is performed. + final Function(int voteType) onVoteAction; + + /// The callback function to execute when a save action is performed. + final Function(bool saved) onSaveAction; const PostCardActions({ super.key, - required this.postId, required this.voteType, required this.saved, required this.onVoteAction, @@ -26,54 +31,56 @@ class PostCardActions extends StatelessWidget { @override Widget build(BuildContext context) { + final l10n = AppLocalizations.of(context)!; + return BlocBuilder( + buildWhen: (previous, current) { + return previous.upvoteColor != current.upvoteColor || + previous.downvoteColor != current.downvoteColor || + previous.saveColor != current.saveColor || + previous.showVoteActions != current.showVoteActions || + previous.showSaveAction != current.showSaveAction; + }, builder: (context, state) { - final bool showVoteActions = state.showVoteActions; - final bool showSaveAction = state.showSaveAction; + Color upvoteColor = state.upvoteColor.color; + Color downvoteColor = state.downvoteColor.color; + Color saveColor = state.saveColor.color; - final bool downvotesEnabled = context.read().state.downvotesEnabled; + bool showVoteActions = state.showVoteActions; + bool showSaveAction = state.showSaveAction; - return Row( - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisSize: MainAxisSize.min, + bool upvoted = voteType == 1; + bool downvoted = voteType == -1; + + return Wrap( children: [ - if (showVoteActions) - IconButton( - icon: Icon( - Icons.arrow_upward, - semanticLabel: voteType == 1 ? 'Upvoted' : 'Upvote', - ), - color: voteType == 1 ? context.read().state.upvoteColor.color : null, - visualDensity: VisualDensity.compact, - onPressed: () { - HapticFeedback.mediumImpact(); - onVoteAction(voteType == 1 ? 0 : 1); - }), - if (showVoteActions && downvotesEnabled) - IconButton( - icon: Icon( - Icons.arrow_downward, - semanticLabel: voteType == -1 ? 'Downvoted' : 'Downvote', - ), - color: voteType == -1 ? context.read().state.downvoteColor.color : null, - visualDensity: VisualDensity.compact, - onPressed: () { - HapticFeedback.mediumImpact(); - onVoteAction(voteType == -1 ? 0 : -1); + if (showVoteActions) ...[ + PostCardAction( + icon: Icons.arrow_upward, + color: upvoted ? upvoteColor : null, + label: upvoted ? l10n.upvoted : l10n.upvote, + onPressed: () => onVoteAction(upvoted ? 0 : 1), + ), + BlocSelector( + selector: (state) => state.downvotesEnabled, + builder: (context, downvotesEnabled) { + if (!downvotesEnabled) return const SizedBox.shrink(); + + return PostCardAction( + icon: Icons.arrow_downward, + color: downvoted ? downvoteColor : null, + label: downvoted ? l10n.downvoted : l10n.downvote, + onPressed: () => onVoteAction(downvoted ? 0 : -1), + ); }, ), + ], if (showSaveAction) - IconButton( - icon: Icon( - saved ? Icons.star_rounded : Icons.star_border_rounded, - semanticLabel: saved ? 'Saved' : 'Save', - ), - color: saved ? context.read().state.saveColor.color : null, - visualDensity: VisualDensity.compact, - onPressed: () { - HapticFeedback.mediumImpact(); - onSaveAction(saved ? false : true); - }, + PostCardAction( + icon: saved ? Icons.star_rounded : Icons.star_border_rounded, + label: saved ? l10n.saved : l10n.save, + color: saved ? saveColor : null, + onPressed: () => onSaveAction(!saved), ), ], ); @@ -81,3 +88,39 @@ class PostCardActions extends StatelessWidget { ); } } + +/// Represents a single action that can be performed on a post when using the card view. +class PostCardAction extends StatelessWidget { + /// The icon to display for the action. The icon will generally change depending on the active state of the action. + final IconData icon; + + /// The color of the icon. This color will change depending on the active state of the action. + final Color? color; + + /// The semantic label for the icon. This is used for accessibility purposes. + final String label; + + /// The callback function to execute when the action is pressed. + final Function() onPressed; + + const PostCardAction({ + super.key, + required this.icon, + required this.color, + required this.label, + required this.onPressed, + }); + + @override + Widget build(BuildContext context) { + return IconButton( + icon: Icon(icon, semanticLabel: label), + color: color, + visualDensity: VisualDensity.compact, + onPressed: () { + HapticFeedback.mediumImpact(); + onPressed(); + }, + ); + } +} diff --git a/lib/community/widgets/post_card_view_comfortable.dart b/lib/community/widgets/post_card_view_comfortable.dart index 733a1db33..875b843e1 100644 --- a/lib/community/widgets/post_card_view_comfortable.dart +++ b/lib/community/widgets/post_card_view_comfortable.dart @@ -3,22 +3,20 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:html/parser.dart'; -import 'package:html_unescape/html_unescape_small.dart'; import 'package:lemmy_api_client/v3.dart'; import 'package:markdown/markdown.dart' hide Text; -import 'package:thunder/account/bloc/account_bloc.dart'; import 'package:thunder/community/enums/community_action.dart'; import 'package:thunder/post/enums/post_action.dart'; import 'package:thunder/post/widgets/post_action_bottom_sheet.dart'; import 'package:thunder/community/widgets/post_card_actions.dart'; import 'package:thunder/community/widgets/post_card_metadata.dart'; -import 'package:thunder/core/enums/font_scale.dart'; import 'package:thunder/core/enums/media_type.dart'; import 'package:thunder/core/enums/view_mode.dart'; import 'package:thunder/core/models/post_view_media.dart'; import 'package:thunder/core/theme/bloc/theme_bloc.dart'; import 'package:thunder/feed/feed.dart'; +import 'package:thunder/post/widgets/post_card_title.dart'; import 'package:thunder/shared/media/media_view.dart'; import 'package:thunder/shared/text/scalable_text.dart'; import 'package:thunder/thunder/bloc/thunder_bloc.dart'; @@ -30,7 +28,6 @@ class PostCardViewComfortable extends StatelessWidget { final PostViewMedia postViewMedia; final bool hideThumbnails; - final bool showThumbnailPreviewOnRight; final bool hideNsfwPreviews; final bool edgeToEdgeImages; final bool showTitleFirst; @@ -52,7 +49,6 @@ class PostCardViewComfortable extends StatelessWidget { super.key, required this.postViewMedia, required this.hideThumbnails, - required this.showThumbnailPreviewOnRight, required this.hideNsfwPreviews, required this.edgeToEdgeImages, required this.showTitleFirst, @@ -73,237 +69,98 @@ class PostCardViewComfortable extends StatelessWidget { this.navigateToPost, }); + /// Returns the color of the container based on the current theme and whether the post is dimmed or not. + /// + /// If the post is the last tapped post, the container will be highlighted with the primary color. + Color? getContainerColor(BuildContext context, {bool dim = false}) { + final theme = Theme.of(context); + final useDarkTheme = context.select((ThemeBloc bloc) => bloc.state.useDarkTheme); + + if (isLastTapped) { + return theme.colorScheme.primary.withValues(alpha: 0.15); + } else if (dim) { + return theme.colorScheme.onSurface.withValues(alpha: useDarkTheme ? 0.05 : 0.075); + } + + return null; + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); - final ThunderState state = context.read().state; + final state = context.read().state; - bool indicateRead = this.indicateRead ?? state.dimReadPosts; + final postView = postViewMedia.postView; + final post = postView.post; + final counts = postView.counts; + final media = postViewMedia.media.firstOrNull; - final showCommunitySubscription = (listingType == ListingType.all || listingType == ListingType.local) && - isUserLoggedIn && - context.read().state.subsciptions.map((subscription) => subscription.community.actorId).contains(postViewMedia.postView.community.actorId); + final showCommunitySubscription = isUserLoggedIn && (listingType == ListingType.all || listingType == ListingType.local) && postView.subscribed != SubscribedType.notSubscribed; + bool indicateRead = this.indicateRead ?? context.select((ThunderBloc bloc) => bloc.state.dimReadPosts); + final textContent = post.body ?? ""; + final readColor = indicateRead && postView.read ? theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.45) : theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.90); - final String textContent = postViewMedia.postView.post.body ?? ""; - Color? communityAndAuthorColorTransformation(Color? color) => indicateRead && postViewMedia.postView.read ? color?.withValues(alpha: 0.45) : color?.withValues(alpha: 0.85); + Widget mediaView; - final Color? readColor = indicateRead && postViewMedia.postView.read ? theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.45) : theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.90); + if (media == null || media.mediaType == MediaType.text) { + mediaView = const SizedBox.shrink(); + } else { + mediaView = MediaView( + media: media, + postId: post.id, + showFullHeightImages: showFullHeightImages, + hideNsfwPreviews: hideNsfwPreviews, + hideThumbnails: hideThumbnails, + edgeToEdgeImages: edgeToEdgeImages, + markPostReadOnMediaView: markPostReadOnMediaView, + isUserLoggedIn: isUserLoggedIn, + navigateToPost: navigateToPost, + read: indicateRead && postView.read, + ); + } - Widget mediaView = MediaView( - media: postViewMedia.media.first, - postId: postViewMedia.postView.post.id, - showFullHeightImages: showFullHeightImages, - hideNsfwPreviews: hideNsfwPreviews, - hideThumbnails: hideThumbnails, - edgeToEdgeImages: edgeToEdgeImages, - markPostReadOnMediaView: markPostReadOnMediaView, - isUserLoggedIn: isUserLoggedIn, - navigateToPost: navigateToPost, - read: indicateRead && postViewMedia.postView.read, - ); - final bool useSaveButton = state.showSaveAction; - final double textScaleFactor = state.titleFontSizeScale.textScaleFactor; + // Post statuses + final read = postView.read; + final hidden = postView.hidden; + final removed = post.removed; + final deleted = post.deleted; + final saved = postView.saved; + final locked = post.locked; + final pinned = post.featuredCommunity || post.featuredLocal; + + Color? communityAndAuthorColorTransformation(Color? color) => indicateRead && read ? color?.withValues(alpha: 0.45) : color?.withValues(alpha: 0.75); + + final dim = indicateRead && read; - final bool darkTheme = context.read().state.useDarkTheme; + Widget postCardTitle = Padding( + padding: const EdgeInsets.only(left: 12.0, right: 12.0), + child: PostCardTitle( + title: post.name, + hidden: hidden ?? false, + locked: locked, + saved: saved, + pinned: pinned, + deleted: deleted, + removed: removed, + dim: dim, + ), + ); return Container( - color: isLastTapped - ? theme.colorScheme.primary.withValues(alpha: 0.15) - : indicateRead && postViewMedia.postView.read - ? theme.colorScheme.onSurface.withValues(alpha: darkTheme ? 0.05 : 0.075) - : null, + color: getContainerColor(context, dim: dim), padding: const EdgeInsets.symmetric(vertical: 12.0), child: Column( + spacing: 2.0, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (showTitleFirst) + if (showTitleFirst) postCardTitle, + if (media != null && media.mediaType != MediaType.text) Padding( - padding: const EdgeInsets.only(left: 12, right: 12, bottom: 4), - child: Text.rich( - TextSpan( - children: [ - if (postViewMedia.postView.hidden == true) - WidgetSpan( - child: Icon( - Icons.visibility_off_rounded, - color: indicateRead && postViewMedia.postView.read - ? context.read().state.hideColor.color.withValues(alpha: 0.55) - : context.read().state.hideColor.color, - size: 16 * textScaleFactor, - semanticLabel: l10n.hidden, - ), - ), - if (postViewMedia.postView.post.locked) ...[ - WidgetSpan( - child: Icon( - Icons.lock, - color: indicateRead && postViewMedia.postView.read - ? context.read().state.upvoteColor.color.withValues(alpha: 0.55) - : context.read().state.upvoteColor.color, - size: 15 * textScaleFactor, - )), - ], - if (!useSaveButton && postViewMedia.postView.saved) - WidgetSpan( - child: Icon( - Icons.star_rounded, - color: indicateRead && postViewMedia.postView.read - ? context.read().state.saveColor.color.withValues(alpha: 0.55) - : context.read().state.saveColor.color, - size: 17 * textScaleFactor, - semanticLabel: 'Saved', - ), - ), - if (postViewMedia.postView.post.featuredCommunity || postViewMedia.postView.post.featuredLocal) - WidgetSpan( - child: Icon( - Icons.push_pin_rounded, - size: 15 * textScaleFactor, - color: indicateRead && postViewMedia.postView.read ? Colors.green.withValues(alpha: 0.55) : Colors.green, - ), - ), - if (postViewMedia.postView.post.deleted) - WidgetSpan( - child: Icon( - Icons.delete_rounded, - size: 16 * textScaleFactor, - color: indicateRead && postViewMedia.postView.read ? Colors.red.withValues(alpha: 0.55) : Colors.red, - ), - ), - if (postViewMedia.postView.post.removed) - WidgetSpan( - child: Icon( - Icons.delete_forever_rounded, - size: 16 * textScaleFactor, - color: indicateRead && postViewMedia.postView.read ? Colors.red.withValues(alpha: 0.55) : Colors.red, - ), - ), - if (postViewMedia.postView.post.deleted || - postViewMedia.postView.post.removed || - postViewMedia.postView.post.featuredCommunity || - postViewMedia.postView.post.featuredLocal || - (!useSaveButton && postViewMedia.postView.saved) || - postViewMedia.postView.post.locked) - const WidgetSpan( - child: SizedBox( - width: 3.5, - ), - ), - TextSpan( - text: HtmlUnescape().convert(postViewMedia.postView.post.name), - style: theme.textTheme.bodyMedium?.copyWith( - fontWeight: FontWeight.w600, - fontSize: MediaQuery.textScalerOf(context).scale(theme.textTheme.bodyMedium!.fontSize! * state.titleFontSizeScale.textScaleFactor), - color: postViewMedia.postView.post.featuredCommunity || postViewMedia.postView.post.featuredLocal - ? (indicateRead && postViewMedia.postView.read ? Colors.green.withValues(alpha: 0.55) : Colors.green) - : (indicateRead && postViewMedia.postView.read ? theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.55) : null), - ), - ), - ], - ), - textScaler: TextScaler.noScaling, - ), - ), - if (postViewMedia.media.first.mediaType != MediaType.text && edgeToEdgeImages) - Padding( - padding: const EdgeInsets.symmetric(vertical: 8), + padding: edgeToEdgeImages ? const EdgeInsets.symmetric(vertical: 8.0) : const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0), child: mediaView, ), - if (postViewMedia.media.first.mediaType != MediaType.text && !edgeToEdgeImages) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: mediaView, - ), - if (!showTitleFirst) - Padding( - padding: const EdgeInsets.only(top: 4.0, bottom: 6.0, left: 12.0, right: 12.0), - child: Text.rich( - TextSpan( - children: [ - if (postViewMedia.postView.hidden == true) ...[ - WidgetSpan( - child: Icon( - Icons.visibility_off_rounded, - color: indicateRead && postViewMedia.postView.read - ? context.read().state.hideColor.color.withValues(alpha: 0.55) - : context.read().state.hideColor.color, - size: 16 * textScaleFactor, - semanticLabel: l10n.hidden, - ), - ), - const WidgetSpan(child: SizedBox(width: 2)), - ], - if (postViewMedia.postView.post.locked) ...[ - WidgetSpan( - child: Icon( - Icons.lock, - color: indicateRead && postViewMedia.postView.read - ? context.read().state.upvoteColor.color.withValues(alpha: 0.55) - : context.read().state.upvoteColor.color, - size: 15 * textScaleFactor, - )), - ], - if (!useSaveButton && postViewMedia.postView.saved) - WidgetSpan( - child: Icon( - Icons.star_rounded, - color: indicateRead && postViewMedia.postView.read - ? context.read().state.saveColor.color.withValues(alpha: 0.55) - : context.read().state.saveColor.color, - size: 17 * textScaleFactor, - semanticLabel: 'Saved', - ), - ), - if (postViewMedia.postView.post.featuredCommunity || postViewMedia.postView.post.featuredLocal) - WidgetSpan( - child: Icon( - Icons.push_pin_rounded, - size: 15 * textScaleFactor, - color: indicateRead && postViewMedia.postView.read ? Colors.green.withValues(alpha: 0.55) : Colors.green, - ), - ), - if (postViewMedia.postView.post.deleted) - WidgetSpan( - child: Icon( - Icons.delete_rounded, - size: 16 * textScaleFactor, - color: indicateRead && postViewMedia.postView.read ? Colors.red.withValues(alpha: 0.55) : Colors.red, - ), - ), - if (postViewMedia.postView.post.removed) - WidgetSpan( - child: Icon( - Icons.delete_forever_rounded, - size: 16 * textScaleFactor, - color: indicateRead && postViewMedia.postView.read ? Colors.red.withValues(alpha: 0.55) : Colors.red, - ), - ), - if (postViewMedia.postView.post.deleted || - postViewMedia.postView.post.removed || - postViewMedia.postView.post.featuredCommunity || - postViewMedia.postView.post.featuredLocal || - (!useSaveButton && postViewMedia.postView.saved) || - postViewMedia.postView.post.locked) - const WidgetSpan( - child: SizedBox( - width: 3.5, - ), - ), - TextSpan( - text: postViewMedia.postView.post.name, - style: theme.textTheme.bodyMedium?.copyWith( - fontWeight: FontWeight.w600, - fontSize: MediaQuery.textScalerOf(context).scale(theme.textTheme.bodyMedium!.fontSize! * state.titleFontSizeScale.textScaleFactor), - color: postViewMedia.postView.post.featuredCommunity || postViewMedia.postView.post.featuredLocal - ? (indicateRead && postViewMedia.postView.read ? Colors.green.withValues(alpha: 0.55) : Colors.green) - : (indicateRead && postViewMedia.postView.read ? theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.55) : null), - ), - ), - ], - ), - textScaler: TextScaler.noScaling, - )), + if (!showTitleFirst) postCardTitle, Visibility( visible: showTextContent && textContent.isNotEmpty, child: Padding( @@ -314,7 +171,7 @@ class PostCardViewComfortable extends StatelessWidget { overflow: TextOverflow.ellipsis, fontScale: state.contentFontSizeScale, style: theme.textTheme.bodyMedium?.copyWith( - color: postViewMedia.postView.read ? readColor : theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.70), + color: postView.read ? readColor : theme.textTheme.bodyMedium?.color?.withValues(alpha: 0.70), ), ), ), @@ -326,6 +183,7 @@ class PostCardViewComfortable extends StatelessWidget { children: [ Expanded( child: Column( + spacing: 8.0, crossAxisAlignment: CrossAxisAlignment.start, children: [ PostCommunityAndAuthor( @@ -337,29 +195,25 @@ class PostCardViewComfortable extends StatelessWidget { compactMode: false, showCommunitySubscription: showCommunitySubscription, ), - const SizedBox(height: 8.0), PostCardMetadata( postCardViewType: ViewMode.comfortable, - score: postViewMedia.postView.counts.score, - upvoteCount: postViewMedia.postView.counts.upvotes, - downvoteCount: postViewMedia.postView.counts.downvotes, - voteType: postViewMedia.postView.myVote ?? 0, - commentCount: postViewMedia.postView.counts.comments, - unreadCommentCount: postViewMedia.postView.unreadComments, - dateTime: postViewMedia.postView.post.updated != null ? postViewMedia.postView.post.updated?.toIso8601String() : postViewMedia.postView.post.published.toIso8601String(), - hasBeenEdited: postViewMedia.postView.post.updated != null ? true : false, - url: postViewMedia.media.firstOrNull != null ? postViewMedia.media.first.originalUrl : null, - languageId: postViewMedia.postView.post.languageId, - hasBeenRead: indicateRead && postViewMedia.postView.read, + score: counts.score, + upvoteCount: counts.upvotes, + downvoteCount: counts.downvotes, + voteType: postView.myVote ?? 0, + commentCount: counts.comments, + unreadCommentCount: postView.unreadComments, + dateTime: post.updated != null ? post.updated?.toIso8601String() : post.published.toIso8601String(), + hasBeenEdited: post.updated != null ? true : false, + url: media?.originalUrl, + languageId: post.languageId, + hasBeenRead: dim, ), ], ), ), IconButton( - icon: const Icon( - Icons.more_horiz_rounded, - semanticLabel: 'Actions', - ), + icon: const Icon(Icons.more_horiz_rounded, semanticLabel: 'Actions'), visualDensity: VisualDensity.compact, onPressed: () { showPostActionBottomModalSheet( @@ -370,7 +224,7 @@ class PostCardViewComfortable extends StatelessWidget { switch (postAction) { case PostAction.hide: - context.read().add(FeedDismissHiddenPostEvent(postId: postViewMedia.postView.post.id)); + context.read().add(FeedDismissHiddenPostEvent(postId: post.id)); break; default: break; @@ -378,7 +232,7 @@ class PostCardViewComfortable extends StatelessWidget { switch (userAction) { case UserAction.block: - context.read().add(FeedDismissBlockedEvent(userId: postViewMedia.postView.creator.id)); + context.read().add(FeedDismissBlockedEvent(userId: postView.creator.id)); break; default: break; @@ -386,7 +240,7 @@ class PostCardViewComfortable extends StatelessWidget { switch (communityAction) { case CommunityAction.block: - context.read().add(FeedDismissBlockedEvent(communityId: postViewMedia.postView.community.id)); + context.read().add(FeedDismissBlockedEvent(communityId: postView.community.id)); break; default: break; @@ -396,14 +250,7 @@ class PostCardViewComfortable extends StatelessWidget { HapticFeedback.mediumImpact(); }), - if (isUserLoggedIn) - PostCardActions( - postId: postViewMedia.postView.post.id, - voteType: postViewMedia.postView.myVote ?? 0, - saved: postViewMedia.postView.saved, - onVoteAction: onVoteAction, - onSaveAction: onSaveAction, - ), + if (isUserLoggedIn) PostCardActions(voteType: postView.myVote ?? 0, saved: postView.saved, onVoteAction: onVoteAction, onSaveAction: onSaveAction), ], ), ) diff --git a/lib/settings/pages/post_appearance_settings_page.dart b/lib/settings/pages/post_appearance_settings_page.dart index e9c9fd1ea..c7bbde0d3 100644 --- a/lib/settings/pages/post_appearance_settings_page.dart +++ b/lib/settings/pages/post_appearance_settings_page.dart @@ -520,7 +520,6 @@ class _PostAppearanceSettingsPageState extends State child: PostCardViewComfortable( postViewMedia: snapshot.data![index]!, hideThumbnails: hideThumbnails, - showThumbnailPreviewOnRight: showThumbnailPreviewOnRight, showPostAuthor: showPostAuthor, hideNsfwPreviews: hideNsfwPreviews, feedType: FeedType.general,