From 3c5ba001aba794cb0a62284df6fa777d47e98c55 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Sat, 24 Jan 2026 20:25:07 +0100 Subject: [PATCH] Make sure home_page is never in fullscreen --- lib/home_page.dart | 53 ++++++++++++++++++++-------------------------- lib/main.dart | 2 ++ 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/lib/home_page.dart b/lib/home_page.dart index 6ac021f..b143b67 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_fullscreen/flutter_fullscreen.dart'; import 'package:logging/logging.dart'; import 'package:sheetless/login_page.dart'; +import 'package:sheetless/main.dart'; import 'package:sheetless/sheet_viewer_page.dart'; import 'package:sheetless/storage_helper.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -19,7 +19,7 @@ class MyHomePage extends StatefulWidget { State createState() => _MyHomePageState(); } -class _MyHomePageState extends State with FullScreenListener { +class _MyHomePageState extends State with RouteAware { ApiClient? apiClient; Future apiLoggedIn = Future.value(false); final StorageHelper _storageHelper = StorageHelper(); @@ -31,10 +31,13 @@ class _MyHomePageState extends State with FullScreenListener { @override void initState() { - FullScreen.addListener(this); + // Deactivate fullscreen by default + FullScreen.setFullScreen(false); - // Load saved fullscreen - FullScreen.setFullScreen(widget.config.fullscreen); + // So RouteAware gets bound + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + routeObserver.subscribe(this, ModalRoute.of(context)!); + }); super.initState(); _loadAppInfo(); @@ -43,10 +46,21 @@ class _MyHomePageState extends State with FullScreenListener { @override void dispose() { - FullScreen.removeListener(this); super.dispose(); } + @override + void didPush() { + FullScreen.setFullScreen(false); + super.didPush(); + } + + @override + void didPopNext() { + FullScreen.setFullScreen(false); + super.didPopNext(); + } + Future _loadAppInfo() async { final info = await PackageInfo.fromPlatform(); setState(() { @@ -143,17 +157,6 @@ class _MyHomePageState extends State with FullScreenListener { switchShufflingState(!shuffling); }, ), - ListTile( - leading: Icon( - widget.config.fullscreen - ? Icons.fullscreen_exit - : Icons.fullscreen, - ), - title: widget.config.fullscreen - ? const Text('Exit Fullscreen') - : const Text('Enter Fullscreen'), - onTap: toggleFullscreen, - ), ListTile( leading: const Icon(Icons.logout), title: const Text('Logout'), @@ -177,18 +180,6 @@ class _MyHomePageState extends State with FullScreenListener { ); } - @override - void onFullScreenChanged(bool enabled, SystemUiMode? systemUiMode) { - setState(() { - widget.config.fullscreen = enabled; - _storageHelper.writeConfig(widget.config); - }); - } - - void toggleFullscreen() { - FullScreen.setFullScreen(!widget.config.fullscreen); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -205,7 +196,9 @@ class _MyHomePageState extends State with FullScreenListener { sheets: snapshot.data!, onSheetOpenRequest: (sheet) { _storageHelper.writeSheetAccessTime( - sheet.uuid, DateTime.now()); + sheet.uuid, + DateTime.now(), + ); Navigator.push( context, MaterialPageRoute( diff --git a/lib/main.dart b/lib/main.dart index 29dc966..3d7417e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,6 +10,7 @@ import 'package:flutter_fullscreen/flutter_fullscreen.dart'; import 'login_page.dart'; +final RouteObserver routeObserver = RouteObserver(); Future main() async { Logger.root.level = Level.ALL; // defaults to Level.INFO Logger.root.onRecord.listen((record) { @@ -42,6 +43,7 @@ class MyApp extends StatelessWidget { title: 'Sheetless', theme: ThemeData(useMaterial3: true, primarySwatch: Colors.blue), home: const LoginPage(), + navigatorObservers: [routeObserver], ); } }