From eb2b09b9cf89d7f2de61800213df12c29b0c8ae9 Mon Sep 17 00:00:00 2001 From: livinglist Date: Fri, 13 Jun 2025 01:19:49 -0700 Subject: [PATCH] fix: offline stories limit. --- lib/blocs/stories/stories_bloc.dart | 8 ++ lib/blocs/stories/stories_event.dart | 7 ++ lib/blocs/stories/stories_state.dart | 16 ++++ .../profile/widgets/offline_list_tile.dart | 73 ++++++++----------- 4 files changed, 61 insertions(+), 43 deletions(-) diff --git a/lib/blocs/stories/stories_bloc.dart b/lib/blocs/stories/stories_bloc.dart index 063e7b35..f6484247 100644 --- a/lib/blocs/stories/stories_bloc.dart +++ b/lib/blocs/stories/stories_bloc.dart @@ -55,6 +55,7 @@ class StoriesBloc extends Bloc with Loggable { on(onExitOfflineMode); on(onClearAllReadStories); on(onUpdateMaxOfflineStoriesCount); + on(onClearMaxOfflineStoriesCount); _preferenceSubscription = _preferenceCubit.stream .distinct((PreferenceState lhs, PreferenceState rhs) { @@ -558,6 +559,13 @@ class StoriesBloc extends Bloc with Loggable { emit(state.copyWith(maxOfflineStoriesCount: event.count)); } + Future onClearMaxOfflineStoriesCount( + ClearMaxOfflineStoriesCount event, + Emitter emit, + ) async { + emit(state.copyWithMaxOfflineStoriesCountReset()); + } + Future onStoryRead( StoryRead event, Emitter emit, diff --git a/lib/blocs/stories/stories_event.dart b/lib/blocs/stories/stories_event.dart index b11ddb15..a20bc678 100644 --- a/lib/blocs/stories/stories_event.dart +++ b/lib/blocs/stories/stories_event.dart @@ -113,6 +113,13 @@ class UpdateMaxOfflineStoriesCount extends StoriesEvent { List get props => [count]; } +class ClearMaxOfflineStoriesCount extends StoriesEvent { + ClearMaxOfflineStoriesCount(); + + @override + List get props => []; +} + class StoryLoaded extends StoriesEvent { StoryLoaded({required this.story, required this.type}); diff --git a/lib/blocs/stories/stories_state.dart b/lib/blocs/stories/stories_state.dart index 9d33dfdf..21a37f89 100644 --- a/lib/blocs/stories/stories_state.dart +++ b/lib/blocs/stories/stories_state.dart @@ -102,6 +102,22 @@ class StoriesState extends Equatable { ); } + StoriesState copyWithMaxOfflineStoriesCountReset() { + return StoriesState( + storiesByType: storiesByType, + storyIdsByType: storyIdsByType, + statusByType: statusByType, + currentPageByType: currentPageByType, + readStoriesIds: readStoriesIds, + isOfflineReading: isOfflineReading, + downloadStatus: downloadStatus, + storiesDownloaded: storiesDownloaded, + storiesToBeDownloaded: storiesToBeDownloaded, + dataSource: dataSource, + maxOfflineStoriesCount: null, + ); + } + StoriesState copyWithStoryAdded({ required StoryType type, required Story story, diff --git a/lib/screens/profile/widgets/offline_list_tile.dart b/lib/screens/profile/widgets/offline_list_tile.dart index d11aebe6..8a0d5681 100644 --- a/lib/screens/profile/widgets/offline_list_tile.dart +++ b/lib/screens/profile/widgets/offline_list_tile.dart @@ -96,6 +96,7 @@ class OfflineListTile extends StatelessWidget { } }); } else { + context.read().add(ClearMaxOfflineStoriesCount()); Connectivity() .checkConnectivity() .then((List res) { @@ -103,51 +104,37 @@ class OfflineListTile extends StatelessWidget { showModalBottomSheet( context: context, builder: (BuildContext context) { - return BlocSelector( - selector: (StoriesState state) => - state.maxOfflineStoriesCount, - builder: ( - BuildContext c, - MaxOfflineStoriesCount? maxStories, - ) { - return SafeArea( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBoxes.pt12, - const Text( - 'How many stories do you want to download?', - ), - for (final MaxOfflineStoriesCount count - in MaxOfflineStoriesCount.values) - RadioListTile( - value: count, - groupValue: state.maxOfflineStoriesCount, - title: Text(count.label), - onChanged: (MaxOfflineStoriesCount? val) { - HapticFeedbackUtil.selection(); + return SafeArea( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBoxes.pt12, + const Text( + 'How many stories do you want to download?', + ), + for (final MaxOfflineStoriesCount count + in MaxOfflineStoriesCount.values) + ListTile( + title: Text(count.label), + onTap: () { + HapticFeedbackUtil.selection(); - if (val != null) { - context.pop(); - final StoriesBloc storiesBloc = - context.read() - ..add( - UpdateMaxOfflineStoriesCount( - count: val, - ), - ); - showConfirmationDialog( - context, - storiesBloc, + context.pop(); + final StoriesBloc storiesBloc = + context.read() + ..add( + UpdateMaxOfflineStoriesCount( + count: count, + ), ); - } - }, - ), - ], - ), - ); - }, + showConfirmationDialog( + context, + storiesBloc, + ); + }, + ), + ], + ), ); }, );