diff --git a/lib/models/settings/client_settings_model.dart b/lib/models/settings/client_settings_model.dart index f16e89b..517dba1 100644 --- a/lib/models/settings/client_settings_model.dart +++ b/lib/models/settings/client_settings_model.dart @@ -13,6 +13,7 @@ part 'client_settings_model.g.dart'; @freezed class ClientSettingsModel with _$ClientSettingsModel { + const ClientSettingsModel._(); factory ClientSettingsModel({ String? syncPath, @Default(Vector2(x: 0, y: 0)) Vector2 position, @@ -33,6 +34,14 @@ class ClientSettingsModel with _$ClientSettingsModel { }) = _ClientSettingsModel; factory ClientSettingsModel.fromJson(Map json) => _$ClientSettingsModelFromJson(json); + + Brightness statusBarBrightness(BuildContext context) { + return switch (themeMode) { + ThemeMode.dark => Brightness.light, + ThemeMode.light => Brightness.dark, + _ => MediaQuery.of(context).platformBrightness == Brightness.dark ? Brightness.light : Brightness.dark, + }; + } } class LocaleConvert implements JsonConverter { diff --git a/lib/models/settings/client_settings_model.freezed.dart b/lib/models/settings/client_settings_model.freezed.dart index 28601be..e7b3a9d 100644 --- a/lib/models/settings/client_settings_model.freezed.dart +++ b/lib/models/settings/client_settings_model.freezed.dart @@ -294,9 +294,8 @@ class __$$ClientSettingsModelImplCopyWithImpl<$Res> /// @nodoc @JsonSerializable() -class _$ClientSettingsModelImpl - with DiagnosticableTreeMixin - implements _ClientSettingsModel { +class _$ClientSettingsModelImpl extends _ClientSettingsModel + with DiagnosticableTreeMixin { _$ClientSettingsModelImpl( {this.syncPath, this.position = const Vector2(x: 0, y: 0), @@ -313,7 +312,8 @@ class _$ClientSettingsModelImpl this.posterSize = 1.0, this.pinchPosterZoom = false, this.mouseDragSupport = false, - this.libraryPageSize}); + this.libraryPageSize}) + : super._(); factory _$ClientSettingsModelImpl.fromJson(Map json) => _$$ClientSettingsModelImplFromJson(json); @@ -464,7 +464,7 @@ class _$ClientSettingsModelImpl } } -abstract class _ClientSettingsModel implements ClientSettingsModel { +abstract class _ClientSettingsModel extends ClientSettingsModel { factory _ClientSettingsModel( {final String? syncPath, final Vector2 position, @@ -482,6 +482,7 @@ abstract class _ClientSettingsModel implements ClientSettingsModel { final bool pinchPosterZoom, final bool mouseDragSupport, final int? libraryPageSize}) = _$ClientSettingsModelImpl; + _ClientSettingsModel._() : super._(); factory _ClientSettingsModel.fromJson(Map json) = _$ClientSettingsModelImpl.fromJson; diff --git a/lib/screens/video_player/video_player_controls.dart b/lib/screens/video_player/video_player_controls.dart index d123576..355d094 100644 --- a/lib/screens/video_player/video_player_controls.dart +++ b/lib/screens/video_player/video_player_controls.dart @@ -7,6 +7,7 @@ import 'package:ficonsax/ficonsax.dart'; import 'package:fladder/models/items/intro_skip_model.dart'; import 'package:fladder/models/media_playback_model.dart'; import 'package:fladder/models/playback/playback_model.dart'; +import 'package:fladder/providers/settings/client_settings_provider.dart'; import 'package:fladder/providers/settings/video_player_settings_provider.dart'; import 'package:fladder/providers/video_player_provider.dart'; import 'package:fladder/screens/shared/default_titlebar.dart'; @@ -52,6 +53,11 @@ class _DesktopControlsState extends ConsumerState { } else { disableFullscreen(); } + + SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( + statusBarIconBrightness: ref.read(clientSettingsProvider.select((value) => value.statusBarBrightness(context))), + )); + timer.cancel(); } @@ -606,6 +612,7 @@ class _DesktopControlsState extends ConsumerState { SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle( statusBarColor: Colors.transparent, systemNavigationBarColor: Colors.transparent, + statusBarIconBrightness: Brightness.light, systemNavigationBarDividerColor: Colors.transparent, )); } diff --git a/lib/widgets/navigation_scaffold/components/navigation_body.dart b/lib/widgets/navigation_scaffold/components/navigation_body.dart index 479cbb7..cb7d79c 100644 --- a/lib/widgets/navigation_scaffold/components/navigation_body.dart +++ b/lib/widgets/navigation_scaffold/components/navigation_body.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:collection/collection.dart'; import 'package:ficonsax/ficonsax.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:fladder/providers/settings/client_settings_provider.dart'; import 'package:fladder/providers/views_provider.dart'; import 'package:fladder/routes/auto_router.gr.dart'; import 'package:fladder/screens/shared/animated_fade_size.dart'; @@ -48,6 +50,17 @@ class _NavigationBodyState extends ConsumerState { @override Widget build(BuildContext context) { final views = ref.watch(viewsProvider.select((value) => value.views)); + ref.listen( + clientSettingsProvider, + (previous, next) { + if (previous != next) { + SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( + statusBarIconBrightness: next.statusBarBrightness(context), + )); + } + }, + ); + return switch (AdaptiveLayout.layoutOf(context)) { LayoutState.phone => MediaQuery.removePadding( context: widget.parentContext,