diff --git a/lib/cubits/thread_navigation_button/thread_navigation_button_cubit.dart b/lib/cubits/thread_navigation_button/thread_navigation_button_cubit.dart index 52b796ee..d77ea3df 100644 --- a/lib/cubits/thread_navigation_button/thread_navigation_button_cubit.dart +++ b/lib/cubits/thread_navigation_button/thread_navigation_button_cubit.dart @@ -1,13 +1,29 @@ +import 'dart:async'; import 'dart:ui'; import 'package:equatable/equatable.dart'; +import 'package:hacki/cubits/cubits.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart'; part 'thread_navigation_button_state.dart'; class ThreadNavigationButtonCubit extends HydratedCubit { - ThreadNavigationButtonCubit() : super(ThreadNavigationButtonState.init()); + ThreadNavigationButtonCubit({required PreferenceCubit preferenceCubit}) + : _preferenceCubit = preferenceCubit, + super(ThreadNavigationButtonState.init()) { + _areSkipButtonsEnabledStreamSubscription = _preferenceCubit.stream + .map((PreferenceState s) => s.areSkipButtonsEnabled) + .distinct() + .listen((bool enabled) { + if (!enabled) { + updateButtonPosition(defaultOffset.dx, defaultOffset.dy); + } + }); + } + + final PreferenceCubit _preferenceCubit; + late final StreamSubscription _areSkipButtonsEnabledStreamSubscription; void updateButtonPosition(double dx, double dy) => emit(state.copyWith(dx: dx, dy: dy)); @@ -30,4 +46,10 @@ class ThreadNavigationButtonCubit _buttonPositionDyKey: state.dy, }; } + + @override + Future close() { + _areSkipButtonsEnabledStreamSubscription.cancel(); + return super.close(); + } } diff --git a/lib/cubits/thread_navigation_button/thread_navigation_button_state.dart b/lib/cubits/thread_navigation_button/thread_navigation_button_state.dart index f48d7abc..1eb52d52 100644 --- a/lib/cubits/thread_navigation_button/thread_navigation_button_state.dart +++ b/lib/cubits/thread_navigation_button/thread_navigation_button_state.dart @@ -1,6 +1,6 @@ part of 'thread_navigation_button_cubit.dart'; -const Offset defaultOffset = Offset(16, 180); +const Offset defaultOffset = Offset(16, 120); class ThreadNavigationButtonState extends Equatable { const ThreadNavigationButtonState({required this.dx, required this.dy}); diff --git a/lib/main.dart b/lib/main.dart index ea0430da..9a9159e4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -223,7 +223,9 @@ class HackiApp extends StatelessWidget { ), BlocProvider( lazy: false, - create: (_) => ThreadNavigationButtonCubit(), + create: (BuildContext context) => ThreadNavigationButtonCubit( + preferenceCubit: context.read(), + ), ), ], child: BlocConsumer( diff --git a/pubspec.yaml b/pubspec.yaml index 4306b910..cdc64318 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: hacki description: A Hacker News client. -version: 3.8.0+380 +version: 3.8.1+381 publish_to: none environment: