From 0c87c90355f598951b8decfaab8bcd98447d3df6 Mon Sep 17 00:00:00 2001 From: ludmila-lovelace Date: Sun, 18 Jan 2026 16:33:14 +1100 Subject: [PATCH] feat: add option to show community and author above post title --- lib/l10n/app_en.arb | 4 + lib/l10n/generated/app_localizations.dart | 18 ++- lib/l10n/generated/app_localizations_ar.dart | 7 +- lib/l10n/generated/app_localizations_be.dart | 7 +- lib/l10n/generated/app_localizations_cs.dart | 7 +- lib/l10n/generated/app_localizations_de.dart | 7 +- lib/l10n/generated/app_localizations_en.dart | 7 +- lib/l10n/generated/app_localizations_eo.dart | 7 +- lib/l10n/generated/app_localizations_es.dart | 7 +- lib/l10n/generated/app_localizations_fi.dart | 7 +- lib/l10n/generated/app_localizations_fr.dart | 7 +- lib/l10n/generated/app_localizations_hu.dart | 7 +- lib/l10n/generated/app_localizations_it.dart | 7 +- lib/l10n/generated/app_localizations_nb.dart | 7 +- lib/l10n/generated/app_localizations_nl.dart | 7 +- lib/l10n/generated/app_localizations_pl.dart | 7 +- lib/l10n/generated/app_localizations_pt.dart | 7 +- lib/l10n/generated/app_localizations_ru.dart | 7 +- lib/l10n/generated/app_localizations_sk.dart | 7 +- lib/l10n/generated/app_localizations_sv.dart | 7 +- lib/l10n/generated/app_localizations_ta.dart | 7 +- lib/l10n/generated/app_localizations_tr.dart | 7 +- lib/l10n/generated/app_localizations_uk.dart | 7 +- lib/l10n/generated/app_localizations_zh.dart | 7 +- .../feed_preferences_cubit.dart | 2 + .../feed_preferences_state.dart | 7 ++ lib/src/core/enums/local_settings.dart | 2 + .../widgets/post_card_view_comfortable.dart | 28 +++-- .../widgets/post_card_view_compact.dart | 6 +- .../pages/post_appearance_settings_page.dart | 109 ++++++++++++------ 30 files changed, 233 insertions(+), 97 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 708d8eb1a..be2024f96 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -2878,6 +2878,10 @@ "@showPostAuthorSubtitle": { "description": "Subtitle for the Show Post Author setting" }, + "showPostCommunityFirst": "Show Community and Author First", + "@showPostCommunityFirst": { + "description": "Toggle to show community and author first." + }, "showPostCommunityIcons": "Show Community Icons", "@showPostCommunityIcons": { "description": "Toggle to show community icons." diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index d1a6ad38b..0b056a779 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -3280,18 +3280,18 @@ abstract class AppLocalizations { /// **'Pinned'** String get pinned; - /// Toggle to use compact view for pinned posts. - /// - /// In en, this message translates to: - /// **'Show Compact Pinned Posts'** - String get pinnedPostsUseCompactView; - /// Message shown when a post is pinned to a community /// /// In en, this message translates to: /// **'Pinned post to community'** String get pinnedPostToCommunity; + /// Toggle to use compact view for pinned posts. + /// + /// In en, this message translates to: + /// **'Show Compact Pinned Posts'** + String get pinnedPostsUseCompactView; + /// Placeholder text for any previews. This comes from https://www.lipsum.com/ /// /// In en, this message translates to: @@ -4522,6 +4522,12 @@ abstract class AppLocalizations { /// **'Post author is always shown in community feeds'** String get showPostAuthorSubtitle; + /// Toggle to show community and author first. + /// + /// In en, this message translates to: + /// **'Show Community and Author First'** + String get showPostCommunityFirst; + /// Toggle to show community icons. /// /// In en, this message translates to: diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index aca509569..a6d5afd0d 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -1796,10 +1796,10 @@ class AppLocalizationsAr extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2483,6 +2483,9 @@ class AppLocalizationsAr extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_be.dart b/lib/l10n/generated/app_localizations_be.dart index ccf146bee..81f53abb3 100644 --- a/lib/l10n/generated/app_localizations_be.dart +++ b/lib/l10n/generated/app_localizations_be.dart @@ -1804,10 +1804,10 @@ class AppLocalizationsBe extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2491,6 +2491,9 @@ class AppLocalizationsBe extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_cs.dart b/lib/l10n/generated/app_localizations_cs.dart index 972e82ce6..bbb479db7 100644 --- a/lib/l10n/generated/app_localizations_cs.dart +++ b/lib/l10n/generated/app_localizations_cs.dart @@ -1810,10 +1810,10 @@ class AppLocalizationsCs extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2489,6 +2489,9 @@ class AppLocalizationsCs extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Zobrazit Komunitní Ikony'; diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 8ba05b570..31d1ec49e 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -1835,10 +1835,10 @@ class AppLocalizationsDe extends AppLocalizations { String get pinned => 'Angeheftet'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Post an Community angeheftet'; @override - String get pinnedPostToCommunity => 'Post an Community angeheftet'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2528,6 +2528,9 @@ class AppLocalizationsDe extends AppLocalizations { String get showPostAuthorSubtitle => 'Der Autor eines Posts wird immer in den Community Feeds angezeigt'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Community-Symbole anzeigen'; diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index 6bdaae503..96246b497 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -1804,10 +1804,10 @@ class AppLocalizationsEn extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2491,6 +2491,9 @@ class AppLocalizationsEn extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_eo.dart b/lib/l10n/generated/app_localizations_eo.dart index 48795eb25..d5fbed689 100644 --- a/lib/l10n/generated/app_localizations_eo.dart +++ b/lib/l10n/generated/app_localizations_eo.dart @@ -1793,10 +1793,10 @@ class AppLocalizationsEo extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2473,6 +2473,9 @@ class AppLocalizationsEo extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index cbff1c2fe..f5654a30c 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -1841,10 +1841,10 @@ class AppLocalizationsEs extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2543,6 +2543,9 @@ class AppLocalizationsEs extends AppLocalizations { String get showPostAuthorSubtitle => 'El autor del tema siempre se muestra en las fuentes de la comunidad'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Mostrar iconos de la comunidad'; diff --git a/lib/l10n/generated/app_localizations_fi.dart b/lib/l10n/generated/app_localizations_fi.dart index b0fb6ded9..a13afdde7 100644 --- a/lib/l10n/generated/app_localizations_fi.dart +++ b/lib/l10n/generated/app_localizations_fi.dart @@ -1796,10 +1796,10 @@ class AppLocalizationsFi extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2477,6 +2477,9 @@ class AppLocalizationsFi extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 9849e9e87..7f4b0f4b6 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -1830,10 +1830,10 @@ class AppLocalizationsFr extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2519,6 +2519,9 @@ class AppLocalizationsFr extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Afficher les icônes de communauté'; diff --git a/lib/l10n/generated/app_localizations_hu.dart b/lib/l10n/generated/app_localizations_hu.dart index 92b77db31..8bed9040b 100644 --- a/lib/l10n/generated/app_localizations_hu.dart +++ b/lib/l10n/generated/app_localizations_hu.dart @@ -1804,10 +1804,10 @@ class AppLocalizationsHu extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2491,6 +2491,9 @@ class AppLocalizationsHu extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index d757f45df..67ec2996d 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1809,10 +1809,10 @@ class AppLocalizationsIt extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2488,6 +2488,9 @@ class AppLocalizationsIt extends AppLocalizations { String get showPostAuthorSubtitle => 'L\'autore del post è sempre mostrato nei feed della comunità'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Mostra Icone Comunità'; diff --git a/lib/l10n/generated/app_localizations_nb.dart b/lib/l10n/generated/app_localizations_nb.dart index 5a05f3468..1ec30ca1d 100644 --- a/lib/l10n/generated/app_localizations_nb.dart +++ b/lib/l10n/generated/app_localizations_nb.dart @@ -1786,10 +1786,10 @@ class AppLocalizationsNb extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2474,6 +2474,9 @@ class AppLocalizationsNb extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart index 70af72cb1..95dd3c876 100644 --- a/lib/l10n/generated/app_localizations_nl.dart +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -1823,10 +1823,10 @@ class AppLocalizationsNl extends AppLocalizations { String get pinned => 'Vastgepind'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Bericht vastgepind in gemeenschap'; @override - String get pinnedPostToCommunity => 'Bericht vastgepind in gemeenschap'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2516,6 +2516,9 @@ class AppLocalizationsNl extends AppLocalizations { String get showPostAuthorSubtitle => 'Bericht­auteur wordt altijd getoond in gemeenschaps­feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Gemeenschaps­pictogrammen tonen'; diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart index 9c7dc9c98..5990803dd 100644 --- a/lib/l10n/generated/app_localizations_pl.dart +++ b/lib/l10n/generated/app_localizations_pl.dart @@ -1812,10 +1812,10 @@ class AppLocalizationsPl extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2492,6 +2492,9 @@ class AppLocalizationsPl extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Pokaż Ikonki Społeczności'; diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index 8ea36f4ea..56e248ddf 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -1813,10 +1813,10 @@ class AppLocalizationsPt extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2500,6 +2500,9 @@ class AppLocalizationsPt extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index d0b4ede12..70644e712 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -1802,10 +1802,10 @@ class AppLocalizationsRu extends AppLocalizations { String get pinned => 'Прикреплено'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2491,6 +2491,9 @@ class AppLocalizationsRu extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_sk.dart b/lib/l10n/generated/app_localizations_sk.dart index 45abd9d6b..a75655138 100644 --- a/lib/l10n/generated/app_localizations_sk.dart +++ b/lib/l10n/generated/app_localizations_sk.dart @@ -1813,10 +1813,10 @@ class AppLocalizationsSk extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2492,6 +2492,9 @@ class AppLocalizationsSk extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Zobraziť ikony komunity'; diff --git a/lib/l10n/generated/app_localizations_sv.dart b/lib/l10n/generated/app_localizations_sv.dart index 3f62f3330..3b4d09444 100644 --- a/lib/l10n/generated/app_localizations_sv.dart +++ b/lib/l10n/generated/app_localizations_sv.dart @@ -1791,10 +1791,10 @@ class AppLocalizationsSv extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2478,6 +2478,9 @@ class AppLocalizationsSv extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_ta.dart b/lib/l10n/generated/app_localizations_ta.dart index 0e6ef68ae..76ff0910e 100644 --- a/lib/l10n/generated/app_localizations_ta.dart +++ b/lib/l10n/generated/app_localizations_ta.dart @@ -1838,10 +1838,10 @@ class AppLocalizationsTa extends AppLocalizations { String get pinned => 'குத்திவைக்கப்பட்டது'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'சமூகத்தில் பின் செய்யப்பட்ட இடுகை'; @override - String get pinnedPostToCommunity => 'சமூகத்தில் பின் செய்யப்பட்ட இடுகை'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2533,6 +2533,9 @@ class AppLocalizationsTa extends AppLocalizations { String get showPostAuthorSubtitle => 'இடுகை ஆசிரியர் எப்போதும் சமூக ஊட்டங்களில் காட்டப்படுகிறார்'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'சமூக சின்னங்களைக் காட்டு'; diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index 3cfabf2b2..bd6e3cf8e 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -1812,10 +1812,10 @@ class AppLocalizationsTr extends AppLocalizations { String get pinned => 'Sabitlenmiş'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2500,6 +2500,9 @@ class AppLocalizationsTr extends AppLocalizations { String get showPostAuthorSubtitle => 'Gönderi yazarı topluluk akışlarında her zaman gösterilir'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Topluluk Simgelerini Göster'; diff --git a/lib/l10n/generated/app_localizations_uk.dart b/lib/l10n/generated/app_localizations_uk.dart index ce8ab45b5..0dd3ac020 100644 --- a/lib/l10n/generated/app_localizations_uk.dart +++ b/lib/l10n/generated/app_localizations_uk.dart @@ -1799,10 +1799,10 @@ class AppLocalizationsUk extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2487,6 +2487,9 @@ class AppLocalizationsUk extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index 863b06e9b..470af03a7 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -1804,10 +1804,10 @@ class AppLocalizationsZh extends AppLocalizations { String get pinned => 'Pinned'; @override - String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; + String get pinnedPostToCommunity => 'Pinned post to community'; @override - String get pinnedPostToCommunity => 'Pinned post to community'; + String get pinnedPostsUseCompactView => 'Show Compact Pinned Posts'; @override String get placeholderText => @@ -2491,6 +2491,9 @@ class AppLocalizationsZh extends AppLocalizations { String get showPostAuthorSubtitle => 'Post author is always shown in community feeds'; + @override + String get showPostCommunityFirst => 'Show Community and Author First'; + @override String get showPostCommunityIcons => 'Show Community Icons'; diff --git a/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_cubit.dart b/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_cubit.dart index 08818005c..371c8e1b9 100644 --- a/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_cubit.dart +++ b/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_cubit.dart @@ -48,6 +48,7 @@ class FeedPreferencesCubit extends Cubit { /// -------------------------- Feed Post Related Settings -------------------------- // Compact Related Settings final useCompactView = UserPreferences.getLocalSetting(LocalSettings.useCompactView) ?? false; + final showPostCommunityFirst = UserPreferences.getLocalSetting(LocalSettings.showPostCommunityFirst) ?? false; final showTitleFirst = UserPreferences.getLocalSetting(LocalSettings.showPostTitleFirst) ?? false; final hideThumbnails = UserPreferences.getLocalSetting(LocalSettings.hideThumbnails) ?? false; final showThumbnailPreviewOnRight = UserPreferences.getLocalSetting(LocalSettings.showThumbnailPreviewOnRight) ?? false; @@ -96,6 +97,7 @@ class FeedPreferencesCubit extends Cubit { showExpandedTaglines: showExpandedTaglines, useCompactView: useCompactView, showTitleFirst: showTitleFirst, + showPostCommunityFirst: showPostCommunityFirst, hideThumbnails: hideThumbnails, showThumbnailPreviewOnRight: showThumbnailPreviewOnRight, linkPostsUseCompactView: linkPostsUseCompactView, diff --git a/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_state.dart b/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_state.dart index 1762ecfe0..075619b9f 100644 --- a/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_state.dart +++ b/lib/src/app/cubits/feed_preferences_cubit/feed_preferences_state.dart @@ -11,6 +11,7 @@ class FeedPreferencesState extends Equatable { this.showHiddenPosts = false, this.showExpandedTaglines = false, this.useCompactView = false, + this.showPostCommunityFirst = false, this.showTitleFirst = false, this.hideThumbnails = false, this.showThumbnailPreviewOnRight = false, @@ -68,6 +69,9 @@ class FeedPreferencesState extends Equatable { /// Whether to use compact view for the post list final bool useCompactView; + /// Whether to show the community and author of the post at the top (card view) + final bool showPostCommunityFirst; + /// Whether to show the title of the post at the top (card view) final bool showTitleFirst; @@ -163,6 +167,7 @@ class FeedPreferencesState extends Equatable { bool? showHiddenPosts, bool? showExpandedTaglines, bool? useCompactView, + bool? showPostCommunityFirst, bool? showTitleFirst, bool? hideThumbnails, bool? showThumbnailPreviewOnRight, @@ -202,6 +207,7 @@ class FeedPreferencesState extends Equatable { showHiddenPosts: showHiddenPosts ?? this.showHiddenPosts, showExpandedTaglines: showExpandedTaglines ?? this.showExpandedTaglines, useCompactView: useCompactView ?? this.useCompactView, + showPostCommunityFirst: showPostCommunityFirst ?? this.showPostCommunityFirst, showTitleFirst: showTitleFirst ?? this.showTitleFirst, hideThumbnails: hideThumbnails ?? this.hideThumbnails, showThumbnailPreviewOnRight: showThumbnailPreviewOnRight ?? this.showThumbnailPreviewOnRight, @@ -244,6 +250,7 @@ class FeedPreferencesState extends Equatable { showHiddenPosts, showExpandedTaglines, useCompactView, + showPostCommunityFirst, showTitleFirst, hideThumbnails, showThumbnailPreviewOnRight, diff --git a/lib/src/core/enums/local_settings.dart b/lib/src/core/enums/local_settings.dart index 76008d3bd..f9237be7f 100644 --- a/lib/src/core/enums/local_settings.dart +++ b/lib/src/core/enums/local_settings.dart @@ -184,6 +184,7 @@ enum LocalSettings { /// -------------------------- Feed Post Related Settings -------------------------- // Compact Related Settings useCompactView(name: 'setting_general_use_compact_view', key: 'compactView', category: LocalSettingsCategories.posts, subCategory: LocalSettingsSubCategories.posts), + showPostCommunityFirst(name: 'setting_general_show_community_first', key: 'showPostCommunityFirst', category: LocalSettingsCategories.posts, subCategory: LocalSettingsSubCategories.posts), showPostTitleFirst(name: 'setting_general_show_title_first', key: 'showPostTitleFirst', category: LocalSettingsCategories.posts, subCategory: LocalSettingsSubCategories.posts), hideThumbnails(name: 'setting_general_hide_thumbnails', key: 'hideThumbnails', category: LocalSettingsCategories.posts, subCategory: LocalSettingsSubCategories.feed), showThumbnailPreviewOnRight( @@ -520,6 +521,7 @@ extension LocalizationExt on AppLocalizations { 'showScoreCounters': showScoreCounters, 'appLanguage': appLanguage, 'compactView': compactView, + 'showPostCommunityFirst': showPostCommunityFirst, 'showPostTitleFirst': showPostTitleFirst, 'hideThumbnails': hideThumbnails, 'showThumbnailPreviewOnRight': showThumbnailPreviewOnRight, diff --git a/lib/src/features/community/presentation/widgets/post_card_view_comfortable.dart b/lib/src/features/community/presentation/widgets/post_card_view_comfortable.dart index 59f20e46f..c81ed1e39 100644 --- a/lib/src/features/community/presentation/widgets/post_card_view_comfortable.dart +++ b/lib/src/features/community/presentation/widgets/post_card_view_comfortable.dart @@ -136,6 +136,7 @@ class PostCardViewComfortable extends StatelessWidget { final dimReadPosts = context.select((cubit) => cubit.state.dimReadPosts); final contentFontSizeScale = context.select((cubit) => cubit.state.contentFontSizeScale); + final showCommunityFirst = context.select((cubit) => cubit.state.showPostCommunityFirst); final useDarkTheme = context.select((ThemePreferencesCubit cubit) => cubit.state.useDarkTheme); @@ -169,8 +170,16 @@ class PostCardViewComfortable extends StatelessWidget { ); } + final postCardAuthor = PostCommunityAndAuthor( + user: post.creator!, + community: post.community!, + dim: dim, + ); + + final edgesPadding = const EdgeInsets.symmetric(horizontal: 12.0); + final postCardTitle = Padding( - padding: const EdgeInsets.only(left: 12.0, right: 12.0), + padding: edgesPadding, child: PostCardTitle( title: post.name, hidden: post.hidden ?? false, @@ -185,22 +194,23 @@ class PostCardViewComfortable extends StatelessWidget { return Container( color: containerColor, - padding: const EdgeInsets.symmetric(vertical: 12.0), + padding: showCommunityFirst ? const EdgeInsets.only(top: 12.0) : const EdgeInsets.symmetric(vertical: 12.0), child: Column( spacing: 2.0, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ + if (showCommunityFirst) Padding(padding: edgesPadding, child: postCardAuthor), if (showTitleFirst) postCardTitle, if (media != null && media.mediaType != MediaType.text) Padding( - padding: edgeToEdgeImages ? const EdgeInsets.symmetric(vertical: 8.0) : const EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0), + padding: edgeToEdgeImages ? const EdgeInsets.symmetric(vertical: 8.0) : edgesPadding + const EdgeInsets.symmetric(vertical: 8.0), child: mediaView, ), if (!showTitleFirst) postCardTitle, if (showTextContent && textContent.isNotEmpty) Padding( - padding: const EdgeInsets.only(bottom: 6.0, left: 12.0, right: 12.0), + padding: showCommunityFirst ? edgesPadding : edgesPadding + const EdgeInsets.only(bottom: 6.0), child: ScalableText( post.textPreview ?? textContent, maxLines: 4, @@ -212,20 +222,16 @@ class PostCardViewComfortable extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.only(bottom: 4.0, left: 12.0, right: 12.0), + padding: edgesPadding + const EdgeInsets.only(bottom: 4.0), child: Row( - crossAxisAlignment: CrossAxisAlignment.end, + crossAxisAlignment: showCommunityFirst ? CrossAxisAlignment.center : CrossAxisAlignment.end, children: [ Expanded( child: Column( spacing: 8.0, crossAxisAlignment: CrossAxisAlignment.start, children: [ - PostCommunityAndAuthor( - user: post.creator!, - community: post.community!, - dim: dim, - ), + if (!showCommunityFirst) postCardAuthor, PostCardMetadata( postCardViewType: ViewMode.comfortable, score: post.score, diff --git a/lib/src/features/community/presentation/widgets/post_card_view_compact.dart b/lib/src/features/community/presentation/widgets/post_card_view_compact.dart index 228cd0bed..ab4fbf9be 100644 --- a/lib/src/features/community/presentation/widgets/post_card_view_compact.dart +++ b/lib/src/features/community/presentation/widgets/post_card_view_compact.dart @@ -65,6 +65,7 @@ class PostCardViewCompact extends StatelessWidget { final showThumbnailPreviewOnRight = context.select((cubit) => cubit.state.showThumbnailPreviewOnRight); final showTextPostIndicator = context.select((cubit) => cubit.state.showTextPostIndicator); final dimReadPostsSetting = context.select((cubit) => cubit.state.dimReadPosts); + final showCommunityFirst = context.select((cubit) => cubit.state.showPostCommunityFirst); final useDarkTheme = context.select((ThemePreferencesCubit cubit) => cubit.state.useDarkTheme); @@ -82,6 +83,8 @@ class PostCardViewCompact extends StatelessWidget { final edited = post.updated != null; final mediaUrl = post.media.firstOrNull?.originalUrl; + final postCardAuthor = PostCommunityAndAuthor(user: creator, community: community, dim: dim); + return Container( color: containerColor, padding: containerPadding, @@ -96,6 +99,7 @@ class PostCardViewCompact extends StatelessWidget { spacing: 6.0, crossAxisAlignment: CrossAxisAlignment.start, children: [ + if (showCommunityFirst) postCardAuthor, PostCardTitle( title: post.name, hidden: post.hidden ?? false, @@ -106,7 +110,7 @@ class PostCardViewCompact extends StatelessWidget { removed: post.removed, dim: dim, ), - PostCommunityAndAuthor(user: creator, community: community, dim: dim), + if (!showCommunityFirst) postCardAuthor, PostCardMetadata( postCardViewType: ViewMode.compact, score: post.score, diff --git a/lib/src/features/settings/presentation/pages/post_appearance_settings_page.dart b/lib/src/features/settings/presentation/pages/post_appearance_settings_page.dart index c7b664859..af35ed537 100644 --- a/lib/src/features/settings/presentation/pages/post_appearance_settings_page.dart +++ b/lib/src/features/settings/presentation/pages/post_appearance_settings_page.dart @@ -59,7 +59,10 @@ class _PostAppearanceSettingsPageState extends State /// When enabled, the text post indicator will be shown for text posts bool showTextPostIndicator = false; - /// Shows the title of the post first, instead of the media or link + /// Shows the community and author of the post first, instead of the media or link + bool showCommunityFirst = false; + + /// Shows the title of the post first, or below the community and author if showCommunityFirst is true bool showTitleFirst = false; /// When enabled, vote actions are shown when the user is logged in @@ -158,6 +161,7 @@ class _PostAppearanceSettingsPageState extends State showTextPostIndicator = prefs.getBool(LocalSettings.showTextPostIndicator.name) ?? false; // Card View Settings + showCommunityFirst = prefs.getBool(LocalSettings.showPostCommunityFirst.name) ?? false; showTitleFirst = prefs.getBool(LocalSettings.showPostTitleFirst.name) ?? false; linkPostsUseCompactView = prefs.getBool(LocalSettings.linkPostsUseCompactView.name) ?? false; pinnedPostsUseCompactView = prefs.getBool(LocalSettings.pinnedPostsUseCompactView.name) ?? true; @@ -249,6 +253,10 @@ class _PostAppearanceSettingsPageState extends State case LocalSettings.cardPostCardMetadataItems: await prefs.setStringList(LocalSettings.cardPostCardMetadataItems.name, value); break; + case LocalSettings.showPostCommunityFirst: + await prefs.setBool(LocalSettings.showPostCommunityFirst.name, value); + setState(() => showCommunityFirst = value); + break; case LocalSettings.showPostTitleFirst: await prefs.setBool(LocalSettings.showPostTitleFirst.name, value); setState(() => showTitleFirst = value); @@ -328,6 +336,7 @@ class _PostAppearanceSettingsPageState extends State await prefs.remove(LocalSettings.pinnedPostsUseCompactView.name); await prefs.remove(LocalSettings.showTextPostIndicator.name); await prefs.remove(LocalSettings.cardPostCardMetadataItems.name); + await prefs.remove(LocalSettings.showPostCommunityFirst.name); await prefs.remove(LocalSettings.showPostTitleFirst.name); await prefs.remove(LocalSettings.showPostFullHeightImages.name); await prefs.remove(LocalSettings.showPostEdgeToEdgeImages.name); @@ -632,6 +641,16 @@ class _PostAppearanceSettingsPageState extends State setting: LocalSettings.hideThumbnails, highlightedSetting: settingToHighlight, ), + ToggleOption( + description: l10n.showPostCommunityFirst, + value: showCommunityFirst, + iconEnabled: Icons.vertical_align_top_rounded, + iconDisabled: Icons.vertical_align_bottom_rounded, + onToggle: (bool value) => setPreferences(LocalSettings.showPostCommunityFirst, value), + highlightKey: settingToHighlightKey, + setting: LocalSettings.showPostCommunityFirst, + highlightedSetting: settingToHighlight, + ), ToggleOption( description: l10n.showPostCommunityIcons, value: showCommunityIcons, @@ -1092,9 +1111,35 @@ class _PostAppearanceSettingsPageState extends State final theme = Theme.of(context); final l10n = GlobalContext.l10n; + final communityAndAuthor = Row( + children: [ + if (showCommunityIcons) + Container( + width: 25, + height: 25, + margin: const EdgeInsets.only(right: 6.0), + decoration: BoxDecoration( + color: theme.dividerColor, + shape: BoxShape.circle, + ), + ), + Expanded( + child: Container( + width: MediaQuery.of(context).size.width * 0.5, + height: 15, + decoration: BoxDecoration( + color: theme.dividerColor, + borderRadius: BorderRadius.circular(12), + ), + ), + ), + ], + ); + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + if (showCommunityFirst) ...[communityAndAuthor, const SizedBox(height: 6.0)], if (showTitleFirst) ...[ Container( width: MediaQuery.of(context).size.width, @@ -1145,31 +1190,7 @@ class _PostAppearanceSettingsPageState extends State child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - children: [ - if (showCommunityIcons) - Container( - width: 25, - height: 25, - margin: const EdgeInsets.only(right: 6.0), - decoration: BoxDecoration( - color: theme.dividerColor, - shape: BoxShape.circle, - ), - ), - Expanded( - child: Container( - width: MediaQuery.of(context).size.width * 0.5, - height: 15, - decoration: BoxDecoration( - color: theme.dividerColor, - borderRadius: BorderRadius.circular(12), - ), - ), - ), - ], - ), - const SizedBox(height: 8.0), + if (!showCommunityFirst) ...[communityAndAuthor, const SizedBox(height: 8.0)], PostCardMetadataDraggableTarget( isDisabled: useCompactView == true, containerHeight: 25.0, @@ -1215,6 +1236,31 @@ class _PostAppearanceSettingsPageState extends State Widget buildCompactViewMetadataPreview({bool isDisabled = false}) { final theme = Theme.of(context); + final communityAndAuthor = Row( + children: [ + if (showCommunityIcons) + Container( + width: 25, + height: 25, + margin: const EdgeInsets.only(right: 6.0), + decoration: BoxDecoration( + color: theme.dividerColor, + shape: BoxShape.circle, + ), + ), + Expanded( + child: Container( + width: MediaQuery.of(context).size.width * 0.5, + height: 15, + decoration: BoxDecoration( + color: theme.dividerColor, + borderRadius: BorderRadius.circular(12), + ), + ), + ), + ], + ); + return Container( padding: const EdgeInsets.only(bottom: 8.0, top: 6), child: Row( @@ -1238,6 +1284,7 @@ class _PostAppearanceSettingsPageState extends State child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + if (showCommunityFirst) ...[communityAndAuthor, const SizedBox(height: 6.0)], Container( width: MediaQuery.of(context).size.width, height: 25, @@ -1247,15 +1294,7 @@ class _PostAppearanceSettingsPageState extends State ), ), // Title const SizedBox(height: 6.0), - Container( - width: MediaQuery.of(context).size.width * 0.5, - height: 15, - decoration: BoxDecoration( - color: theme.dividerColor, - borderRadius: BorderRadius.circular((showEdgeToEdgeImages ? 0 : 12)), - ), - ), - const SizedBox(height: 6.0), + if (!showCommunityFirst) ...[communityAndAuthor, const SizedBox(height: 6.0)], PostCardMetadataDraggableTarget( isDisabled: useCompactView == false, containerHeight: 25.0,