From 9829be619c96cc7df4a1a4b4114fd132ca4b3c2a Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:44:48 -0400 Subject: [PATCH] chore: message on empty vocab filter (#4410) --- lib/l10n/intl_en.arb | 3 +- .../vocab_analytics_list_view.dart | 55 ++++++++++++------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index abbfc1fae..4a4e63ba9 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -5303,5 +5303,6 @@ }, "addCourse": "Add a course", "joinCourseWithCode": "Join course with code", - "joinPublicCourse": "Join public course" + "joinPublicCourse": "Join public course", + "vocabLevelsDesc": "This is where vocab words will go once you’ve leveled them up!" } diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart index 4e50f2854..78ae5dbe0 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart @@ -5,6 +5,7 @@ import 'package:collection/collection.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; import 'package:fluffychat/pangea/analytics_details_popup/vocab_analytics_list_tile.dart'; import 'package:fluffychat/pangea/analytics_downloads/analytics_download_button.dart'; @@ -148,27 +149,41 @@ class VocabAnalyticsListView extends StatelessWidget { ), // Grid of vocab tiles - SliverGrid( - gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 100.0, - mainAxisExtent: 100.0, - crossAxisSpacing: 8.0, - mainAxisSpacing: 8.0, - ), - delegate: SliverChildBuilderDelegate( - (context, index) { - final vocabItem = _filteredVocab[index]; - return VocabAnalyticsListTile( - onTap: () => context.go( - "/rooms/analytics/${vocabItem.id.type.string}/${vocabItem.id.string}", + _filteredVocab.isEmpty + ? SliverToBoxAdapter( + child: controller.selectedConstructLevel != null + ? Padding( + padding: const EdgeInsets.all(24.0), + child: Text( + L10n.of(context).vocabLevelsDesc, + style: Theme.of(context).textTheme.bodyMedium, + textAlign: TextAlign.center, + ), + ) + : const SizedBox.shrink(), + ) + : SliverGrid( + gridDelegate: + const SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: 100.0, + mainAxisExtent: 100.0, + crossAxisSpacing: 8.0, + mainAxisSpacing: 8.0, ), - constructUse: vocabItem, - emoji: vocabItem.id.userSetEmoji.firstOrNull, - ); - }, - childCount: _filteredVocab.length, - ), - ), + delegate: SliverChildBuilderDelegate( + (context, index) { + final vocabItem = _filteredVocab[index]; + return VocabAnalyticsListTile( + onTap: () => context.go( + "/rooms/analytics/${vocabItem.id.type.string}/${vocabItem.id.string}", + ), + constructUse: vocabItem, + emoji: vocabItem.id.userSetEmoji.firstOrNull, + ); + }, + childCount: _filteredVocab.length, + ), + ), ], ), ),