avoid using consumer

This commit is contained in:
Fabian Freund
2025-11-13 09:16:04 +01:00
parent 11f932b68e
commit 56cc6ffe55
@@ -52,22 +52,16 @@ import 'package:weblibre/features/user/domain/repositories/general_settings.dart
import 'package:weblibre/utils/ui_helper.dart' as ui_helper; import 'package:weblibre/utils/ui_helper.dart' as ui_helper;
class BrowserScreen extends HookConsumerWidget { class BrowserScreen extends HookConsumerWidget {
Duration get _backButtonPressTimeout => const Duration(seconds: 2);
const BrowserScreen({super.key}); const BrowserScreen({super.key});
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final eventService = ref.watch(eventServiceProvider); final eventService = ref.watch(eventServiceProvider);
final overlayBuilder = ref.watch(overlayControllerProvider);
final tabInFullScreen = ref.watch( final tabInFullScreen = ref.watch(
selectedTabStateProvider.select((value) => value?.isFullScreen ?? false), selectedTabStateProvider.select((value) => value?.isFullScreen ?? false),
); );
final lastBackButtonPress = useRef<DateTime?>(null);
final overlayController = useOverlayPortalController(); final overlayController = useOverlayPortalController();
final showAppBar = useValueNotifier(true); final showAppBar = useValueNotifier(true);
@@ -221,8 +215,41 @@ class BrowserScreen extends HookConsumerWidget {
); );
}, },
), ),
body: Consumer( body: _Browser(
builder: (context, ref, child) { overlayController: overlayController,
sheetController: sheetController,
showAppBar: showAppBar,
tabInFullScreen: tabInFullScreen,
),
floatingActionButton: ReaderAppearanceButton(),
),
),
);
}
}
class _Browser extends HookConsumerWidget {
Duration get _backButtonPressTimeout => const Duration(seconds: 2);
final OverlayPortalController overlayController;
final ValueNotifier<PersistentBottomSheetController?> sheetController;
final ValueNotifier<bool> showAppBar;
final bool tabInFullScreen;
const _Browser({
required this.overlayController,
required this.sheetController,
required this.showAppBar,
required this.tabInFullScreen,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
final lastBackButtonPress = useRef<DateTime?>(null);
final overlayBuilder = ref.watch(overlayControllerProvider);
ref.listen(bottomSheetControllerProvider, (previous, next) { ref.listen(bottomSheetControllerProvider, (previous, next) {
if (sheetController.value != null) { if (sheetController.value != null) {
try { try {
@@ -233,19 +260,13 @@ class BrowserScreen extends HookConsumerWidget {
} }
if (next != null) { if (next != null) {
final relativeSafeArea = MediaQuery.of( final relativeSafeArea = MediaQuery.of(context).relativeSafeArea();
context, final controller = Scaffold.of(context).showBottomSheet((context) {
).relativeSafeArea();
final controller = Scaffold.of(context).showBottomSheet((
context,
) {
bool dismissOnThreshold( bool dismissOnThreshold(
DraggableScrollableNotification notification, DraggableScrollableNotification notification,
) { ) {
if (notification.extent <= 0.1) { if (notification.extent <= 0.1) {
ref ref.read(bottomSheetControllerProvider.notifier).requestDismiss();
.read(bottomSheetControllerProvider.notifier)
.requestDismiss();
return true; return true;
} }
@@ -275,9 +296,7 @@ class BrowserScreen extends HookConsumerWidget {
unawaited( unawaited(
controller.closed.whenComplete(() { controller.closed.whenComplete(() {
ref ref.read(bottomSheetControllerProvider.notifier).closed(next);
.read(bottomSheetControllerProvider.notifier)
.closed(next);
}), }),
); );
@@ -345,16 +364,12 @@ class BrowserScreen extends HookConsumerWidget {
} }
if (overlayBuilder != null) { if (overlayBuilder != null) {
ref ref.read(overlayControllerProvider.notifier).dismiss();
.read(overlayControllerProvider.notifier)
.dismiss();
return true; return true;
} }
if (tabState?.isFullScreen == true) { if (tabState?.isFullScreen == true) {
await ref await ref.read(selectedTabSessionProvider).exitFullscreen();
.read(selectedTabSessionProvider)
.exitFullscreen();
return true; return true;
} }
@@ -364,9 +379,7 @@ class BrowserScreen extends HookConsumerWidget {
if (tabState?.isLoading == true) { if (tabState?.isLoading == true) {
lastBackButtonPress.value = null; lastBackButtonPress.value = null;
final controller = ref.read( final controller = ref.read(selectedTabSessionProvider);
selectedTabSessionProvider,
);
await controller.stopLoading(); await controller.stopLoading();
return true; return true;
@@ -374,18 +387,14 @@ class BrowserScreen extends HookConsumerWidget {
lastBackButtonPress.value = null; lastBackButtonPress.value = null;
await ref await ref
.read( .read(readerableScreenControllerProvider.notifier)
readerableScreenControllerProvider.notifier,
)
.toggleReaderView(false); .toggleReaderView(false);
return true; return true;
} else if (tabState?.historyState.canGoBack == true) { } else if (tabState?.historyState.canGoBack == true) {
lastBackButtonPress.value = null; lastBackButtonPress.value = null;
final controller = ref.read( final controller = ref.read(selectedTabSessionProvider);
selectedTabSessionProvider,
);
await controller.goBack(); await controller.goBack();
return true; return true;
@@ -405,9 +414,7 @@ class BrowserScreen extends HookConsumerWidget {
} }
if (lastBackButtonPress.value != null && if (lastBackButtonPress.value != null &&
DateTime.now().difference( DateTime.now().difference(lastBackButtonPress.value!) <
lastBackButtonPress.value!,
) <
_backButtonPressTimeout) { _backButtonPressTimeout) {
lastBackButtonPress.value = null; lastBackButtonPress.value = null;
@@ -419,9 +426,7 @@ class BrowserScreen extends HookConsumerWidget {
if (context.mounted) { if (context.mounted) {
ui_helper.showTabUndoClose( ui_helper.showTabUndoClose(
context, context,
ref ref.read(tabRepositoryProvider.notifier).undoClose,
.read(tabRepositoryProvider.notifier)
.undoClose,
); );
} }
@@ -451,12 +456,6 @@ class BrowserScreen extends HookConsumerWidget {
); );
}, },
); );
},
),
floatingActionButton: ReaderAppearanceButton(),
),
),
);
} }
} }