From ffac89899c7ce69b5c4ee22b8ec692734d3b7d78 Mon Sep 17 00:00:00 2001 From: PartyDonut Date: Thu, 31 Jul 2025 19:52:12 +0200 Subject: [PATCH] fix: Subtitle editor screens --- .../settings/player_settings_page.dart | 29 ++++++++++--------- .../settings/widgets/subtitle_editor.dart | 8 ++--- .../components/video_subtitle_controls.dart | 22 ++++++++++---- lib/util/widget_extensions.dart | 2 +- 4 files changed, 36 insertions(+), 25 deletions(-) diff --git a/lib/screens/settings/player_settings_page.dart b/lib/screens/settings/player_settings_page.dart index 51512ca..f792caf 100644 --- a/lib/screens/settings/player_settings_page.dart +++ b/lib/screens/settings/player_settings_page.dart @@ -249,6 +249,21 @@ class _PlayerSettingsPageState extends ConsumerState { onChanged: (value) => provider.setUseLibass(value), ), ), + if (!videoSettings.useLibass) + SettingsListTile( + label: Text(context.localized.settingsPlayerCustomSubtitlesTitle), + subLabel: Text(context.localized.settingsPlayerCustomSubtitlesDesc), + onTap: videoSettings.useLibass + ? null + : () { + showDialog( + context: context, + barrierDismissible: true, + useSafeArea: false, + builder: (context) => const SubtitleEditor(), + ); + }, + ), AnimatedFadeSize( child: videoSettings.useLibass && videoSettings.hardwareAccel && Platform.isAndroid ? SettingsMessageBox( @@ -272,20 +287,6 @@ class _PlayerSettingsPageState extends ConsumerState { }, )), ), - SettingsListTile( - label: Text(context.localized.settingsPlayerCustomSubtitlesTitle), - subLabel: Text(context.localized.settingsPlayerCustomSubtitlesDesc), - onTap: videoSettings.useLibass - ? null - : () { - showDialog( - context: context, - barrierDismissible: false, - useSafeArea: false, - builder: (context) => const SubtitleEditor(), - ); - }, - ), ], ), _ => SettingsMessageBox( diff --git a/lib/screens/settings/widgets/subtitle_editor.dart b/lib/screens/settings/widgets/subtitle_editor.dart index 0d80071..66b4052 100644 --- a/lib/screens/settings/widgets/subtitle_editor.dart +++ b/lib/screens/settings/widgets/subtitle_editor.dart @@ -7,9 +7,7 @@ import 'package:fladder/models/settings/subtitle_settings_model.dart'; import 'package:fladder/providers/settings/subtitle_settings_provider.dart'; import 'package:fladder/providers/settings/video_player_settings_provider.dart'; import 'package:fladder/screens/video_player/components/video_subtitle_controls.dart'; -import 'package:fladder/util/adaptive_layout/adaptive_layout.dart'; import 'package:fladder/util/localization_helper.dart'; -import 'package:fladder/widgets/navigation_scaffold/components/fladder_app_bar.dart'; class SubtitleEditor extends ConsumerStatefulWidget { const SubtitleEditor({super.key}); @@ -27,8 +25,9 @@ class _SubtitleEditorState extends ConsumerState { final fakeText = context.localized.subtitleConfiguratorPlaceHolder; double lastScale = 0.0; - return Scaffold( - body: Dialog.fullscreen( + return Padding( + padding: EdgeInsets.only(top: MediaQuery.paddingOf(context).top), + child: Dialog.fullscreen( child: GestureDetector( onScaleUpdate: (details) { lastScale = details.scale; @@ -73,7 +72,6 @@ class _SubtitleEditorState extends ConsumerState { padding: MediaQuery.paddingOf(context), child: Column( children: [ - if (AdaptiveLayout.of(context).isDesktop) const FladderAppBar(), Row( children: [ const BackButton(), diff --git a/lib/screens/video_player/components/video_subtitle_controls.dart b/lib/screens/video_player/components/video_subtitle_controls.dart index e82e716..3bcb8d9 100644 --- a/lib/screens/video_player/components/video_subtitle_controls.dart +++ b/lib/screens/video_player/components/video_subtitle_controls.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:auto_route/auto_route.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; import 'package:fladder/providers/settings/subtitle_settings_provider.dart'; import 'package:fladder/screens/shared/flat_button.dart'; @@ -60,7 +62,8 @@ class _VideoSubtitleControlsState extends ConsumerState { duration: const Duration(milliseconds: 250), decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), - color: controlsHidden ? DialogTheme.of(context).backgroundColor?.withValues(alpha: 0.75) : Colors.transparent, + color: + controlsHidden ? Theme.of(context).colorScheme.surfaceContainer.withValues(alpha: 0.8) : Colors.transparent, ), child: Padding( padding: const EdgeInsets.all(16), @@ -68,10 +71,19 @@ class _VideoSubtitleControlsState extends ConsumerState { mainAxisSize: MainAxisSize.min, children: [ if (widget.label?.isNotEmpty == true) - Text( - widget.label!, - style: Theme.of(context).textTheme.headlineMedium, - ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + widget.label!, + style: Theme.of(context).textTheme.headlineMedium, + ), + IconButton( + onPressed: () => context.maybePop(), + icon: const Icon(IconsaxPlusBold.close_circle), + ) + ], + ).addVisiblity(activeKey == null ? controlsHidden : activeKey == const Key('title')), IconButton.filledTonal( isSelected: !hideControls, onPressed: () => setState(() => hideControls = !hideControls), diff --git a/lib/util/widget_extensions.dart b/lib/util/widget_extensions.dart index d97c23e..68df463 100644 --- a/lib/util/widget_extensions.dart +++ b/lib/util/widget_extensions.dart @@ -24,6 +24,6 @@ extension WidgetExtensions on Widget { } Widget addVisiblity(bool visible) { - return AnimatedOpacity(duration: const Duration(milliseconds: 250), opacity: visible ? 1 : 0, child: this); + return AnimatedOpacity(duration: const Duration(milliseconds: 250), opacity: visible ? 1 : 0.10, child: this); } }