diff --git a/packages/neon/neon_news/lib/sort/folders.dart b/packages/neon/neon_news/lib/sort/folders.dart index 05cf9813..50ff603d 100644 --- a/packages/neon/neon_news/lib/sort/folders.dart +++ b/packages/neon/neon_news/lib/sort/folders.dart @@ -2,8 +2,8 @@ part of '../neon_news.dart'; final foldersSortBox = SortBox( { - FoldersSortProperty.alphabetical: (final folderFeedsWrapper) => folderFeedsWrapper.folder.name.toLowerCase(), - FoldersSortProperty.unreadCount: (final folderFeedsWrapper) => folderFeedsWrapper.feedsUnreadCountSum, + FoldersSortProperty.alphabetical: (final folderFeedsWrapper) => folderFeedsWrapper.$1.name.toLowerCase(), + FoldersSortProperty.unreadCount: (final folderFeedsWrapper) => folderFeedsWrapper.$3, }, { FoldersSortProperty.alphabetical: Box(FoldersSortProperty.unreadCount, SortBoxOrder.descending), @@ -11,13 +11,4 @@ final foldersSortBox = SortBox( }, ); -class FolderFeedsWrapper { - FolderFeedsWrapper( - this.folder, - this.feeds, - ); - - final NextcloudNewsFolder folder; - final List feeds; - int get feedsUnreadCountSum => feeds.fold(0, (final a, final b) => a + b.unreadCount!); -} +typedef FolderFeedsWrapper = (NextcloudNewsFolder folder, List feeds, int unreadCount); diff --git a/packages/neon/neon_news/lib/widgets/folders_view.dart b/packages/neon/neon_news/lib/widgets/folders_view.dart index 6b351aee..2678ec71 100644 --- a/packages/neon/neon_news/lib/widgets/folders_view.dart +++ b/packages/neon/neon_news/lib/widgets/folders_view.dart @@ -19,14 +19,12 @@ class NewsFoldersView extends StatelessWidget { sortBoxOrderOption: bloc.options.foldersSortBoxOrderOption, input: feeds.data == null ? null - : folders.data - ?.map( - (final folder) => FolderFeedsWrapper( - folder, - feeds.data!.where((final feed) => feed.folderId == folder.id).toList(), - ), - ) - .toList(), + : folders.data?.map((final folder) { + final feedsInFolder = feeds.data!.where((final feed) => feed.folderId == folder.id).toList(); + final unreadCount = feedsInFolder.fold(0, (final a, final b) => a + b.unreadCount!); + + return (folder, feedsInFolder, unreadCount); + }).toList(), builder: (final context, final sorted) => NeonListView( scrollKey: 'news-folders', withFloatingActionButton: true, @@ -44,10 +42,10 @@ class NewsFoldersView extends StatelessWidget { final BuildContext context, final FolderFeedsWrapper folderFeedsWrapper, ) { - final unreadCount = folderFeedsWrapper.feedsUnreadCountSum; + final (folder, feeds, unreadCount) = folderFeedsWrapper; return ListTile( title: Text( - folderFeedsWrapper.folder.name, + folder.name, style: unreadCount == 0 ? Theme.of(context).textTheme.titleMedium!.copyWith(color: Theme.of(context).disabledColor) : null, @@ -68,7 +66,7 @@ class NewsFoldersView extends StatelessWidget { ), Center( child: Text( - folderFeedsWrapper.feeds.length.toString(), + feeds.length.toString(), style: TextStyle( color: Theme.of(context).colorScheme.onPrimary, ), @@ -95,19 +93,19 @@ class NewsFoldersView extends StatelessWidget { if (await showConfirmationDialog( context, // ignore: use_build_context_synchronously - AppLocalizations.of(context).folderDeleteConfirm(folderFeedsWrapper.folder.name), + AppLocalizations.of(context).folderDeleteConfirm(folder.name), )) { - bloc.deleteFolder(folderFeedsWrapper.folder.id); + bloc.deleteFolder(folder.id); } break; case NewsFolderAction.rename: final result = await showRenameDialog( context: context, title: AppLocalizations.of(context).folderRename, - value: folderFeedsWrapper.folder.name, + value: folder.name, ); if (result != null) { - bloc.renameFolder(folderFeedsWrapper.folder.id, result); + bloc.renameFolder(folder.id, result); } break; } @@ -115,7 +113,7 @@ class NewsFoldersView extends StatelessWidget { ), onLongPress: () { if (unreadCount > 0) { - bloc.markFolderAsRead(folderFeedsWrapper.folder.id); + bloc.markFolderAsRead(folder.id); } }, onTap: () async { @@ -123,7 +121,7 @@ class NewsFoldersView extends StatelessWidget { MaterialPageRoute( builder: (final context) => NewsFolderPage( bloc: bloc, - folder: folderFeedsWrapper.folder, + folder: folder, ), ), );