mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-13 01:10:31 -07:00
feature: HTPC mode startup argument (#358)
Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
parent
a8795cf0c9
commit
69a5e3db7a
24 changed files with 416 additions and 151 deletions
|
|
@ -9,6 +9,7 @@ import 'package:fladder/util/adaptive_layout/adaptive_layout_model.dart';
|
|||
import 'package:fladder/util/debug_banner.dart';
|
||||
import 'package:fladder/util/localization_helper.dart';
|
||||
import 'package:fladder/util/poster_defaults.dart';
|
||||
import 'package:fladder/util/resolution_checker.dart';
|
||||
|
||||
enum InputDevice {
|
||||
touch,
|
||||
|
|
@ -209,7 +210,11 @@ class _AdaptiveLayoutBuilderState extends ConsumerState<AdaptiveLayoutBuilder> {
|
|||
controller: controller,
|
||||
posterDefaults: posterDefaults,
|
||||
),
|
||||
child: widget.adaptiveLayout == null ? DebugBanner(child: widget.child(context)) : widget.child(context),
|
||||
child: Builder(
|
||||
builder: (context) => ResolutionChecker(
|
||||
child: widget.adaptiveLayout == null ? DebugBanner(child: widget.child(context)) : widget.child(context),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
|
|||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
import 'package:fladder/models/book_model.dart';
|
||||
import 'package:fladder/models/item_base_model.dart';
|
||||
|
|
@ -26,6 +25,7 @@ import 'package:fladder/util/adaptive_layout/adaptive_layout.dart';
|
|||
import 'package:fladder/util/list_extensions.dart';
|
||||
import 'package:fladder/util/localization_helper.dart';
|
||||
import 'package:fladder/util/refresh_state.dart';
|
||||
import 'package:fladder/widgets/full_screen_helpers/full_screen_wrapper.dart';
|
||||
|
||||
Future<void> _showLoadingIndicator(BuildContext context) async {
|
||||
return showDialog(
|
||||
|
|
@ -103,10 +103,7 @@ Future<void> _playVideo(
|
|||
),
|
||||
);
|
||||
if (AdaptiveLayout.of(context).isDesktop) {
|
||||
final fullScreen = await windowManager.isFullScreen();
|
||||
if (fullScreen) {
|
||||
await windowManager.setFullScreen(false);
|
||||
}
|
||||
fullScreenHelper.closeFullScreen(ref);
|
||||
}
|
||||
if (context.mounted) {
|
||||
context.refreshData();
|
||||
|
|
|
|||
63
lib/util/resolution_checker.dart
Normal file
63
lib/util/resolution_checker.dart
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:screen_retriever/screen_retriever.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
import 'package:fladder/providers/arguments_provider.dart';
|
||||
|
||||
class ResolutionChecker extends ConsumerStatefulWidget {
|
||||
final Widget child;
|
||||
const ResolutionChecker({required this.child, super.key});
|
||||
|
||||
@override
|
||||
ConsumerState<ResolutionChecker> createState() => _ResolutionCheckerState();
|
||||
}
|
||||
|
||||
class _ResolutionCheckerState extends ConsumerState<ResolutionChecker> {
|
||||
Size? lastResolution;
|
||||
Timer? _timer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((value) async {
|
||||
if (ref.read(argumentsStateProvider).htpcMode) {
|
||||
lastResolution = (await screenRetriever.getPrimaryDisplay()).size;
|
||||
_timer = Timer.periodic(const Duration(seconds: 2), (timer) => checkResolution());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> checkResolution() async {
|
||||
if (!mounted) return;
|
||||
final newResolution = (await screenRetriever.getPrimaryDisplay()).size;
|
||||
if (lastResolution != newResolution) {
|
||||
lastResolution = newResolution;
|
||||
shouldSetResolution();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> shouldSetResolution() async {
|
||||
if (lastResolution != null) {
|
||||
final isFullScreen = await windowManager.isFullScreen();
|
||||
if (isFullScreen) {
|
||||
await windowManager.setFullScreen(false);
|
||||
}
|
||||
await windowManager.setFullScreen(true);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_timer?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return widget.child;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue