persist twoPageMode

This commit is contained in:
2025-09-25 18:33:50 +02:00
parent 1fd5783244
commit c5089f8de1
4 changed files with 58 additions and 18 deletions

View File

@@ -7,7 +7,9 @@ import 'api.dart';
import 'sheet.dart'; import 'sheet.dart';
class MyHomePage extends StatefulWidget { class MyHomePage extends StatefulWidget {
const MyHomePage({super.key}); final Config config;
const MyHomePage({super.key, required this.config});
@override @override
State<MyHomePage> createState() => _MyHomePageState(); State<MyHomePage> createState() => _MyHomePageState();
@@ -73,8 +75,11 @@ class _MyHomePageState extends State<MyHomePage> {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => builder: (context) => SheetViewerPage(
SheetViewerPage(sheet: sheet, apiClient: apiClient!), sheet: sheet,
apiClient: apiClient!,
config: widget.config,
),
), ),
); );
}, },

View File

@@ -3,7 +3,6 @@ import 'package:jwt_decoder/jwt_decoder.dart';
import 'package:sheetless/api.dart'; import 'package:sheetless/api.dart';
import 'package:sheetless/home_page.dart'; import 'package:sheetless/home_page.dart';
import 'package:sheetless/storage_helper.dart'; import 'package:sheetless/storage_helper.dart';
import 'package:sheetless/utility.dart';
class LoginPage extends StatefulWidget { class LoginPage extends StatefulWidget {
const LoginPage({super.key}); const LoginPage({super.key});
@@ -77,10 +76,11 @@ class _LoginPageState extends State<LoginPage> {
} }
} }
void _navigateToMainPage() { Future<void> _navigateToMainPage() async {
Navigator.of( final config = await _storageHelper.readConfig();
context, Navigator.of(context).pushReplacement(
).pushReplacement(MaterialPageRoute(builder: (_) => MyHomePage())); MaterialPageRoute(builder: (_) => MyHomePage(config: config)),
);
} }
@override @override

View File

@@ -6,15 +6,18 @@ import 'package:logging/logging.dart';
import 'package:pdfrx/pdfrx.dart'; import 'package:pdfrx/pdfrx.dart';
import 'package:sheetless/api.dart'; import 'package:sheetless/api.dart';
import 'package:sheetless/sheet.dart'; import 'package:sheetless/sheet.dart';
import 'package:sheetless/storage_helper.dart';
class SheetViewerPage extends StatefulWidget { class SheetViewerPage extends StatefulWidget {
final Sheet sheet; final Sheet sheet;
final ApiClient apiClient; final ApiClient apiClient;
final Config config;
const SheetViewerPage({ const SheetViewerPage({
super.key, super.key,
required this.sheet, required this.sheet,
required this.apiClient, required this.apiClient,
required this.config,
}); });
@override @override
@@ -23,12 +26,12 @@ class SheetViewerPage extends StatefulWidget {
class _SheetViewerPageState extends State<SheetViewerPage> { class _SheetViewerPageState extends State<SheetViewerPage> {
final log = Logger("SheetViewerPage"); final log = Logger("SheetViewerPage");
final StorageHelper storageHelper = StorageHelper();
int page = 1; int page = 1;
int numPages = 1; int numPages = 1;
bool isFullscreen = false;
late Future<bool> documentLoaded; late Future<bool> documentLoaded;
PdfDocument? document; PdfDocument? document;
bool twoPageMode = true;
bool paintMode = false; bool paintMode = false;
@override @override
@@ -63,8 +66,10 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
} }
void toggleFullscreen() { void toggleFullscreen() {
isFullscreen = !isFullscreen; widget.config.fullscreen = !widget.config.fullscreen;
if (isFullscreen) { storageHelper.writeConfig(widget.config);
if (widget.config.fullscreen) {
log.info("enter fullscreen"); log.info("enter fullscreen");
// enter fullscreen // enter fullscreen
SystemChrome.setEnabledSystemUIMode( SystemChrome.setEnabledSystemUIMode(
@@ -90,7 +95,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
IconButton( IconButton(
onPressed: () { onPressed: () {
setState(() { setState(() {
if (twoPageMode) { if (widget.config.twoPageMode) {
// TODO: notification that paint mode only in single page mode // TODO: notification that paint mode only in single page mode
} else { } else {
paintMode = !paintMode; paintMode = !paintMode;
@@ -102,14 +107,17 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
IconButton( IconButton(
onPressed: () { onPressed: () {
setState(() { setState(() {
twoPageMode = !twoPageMode; widget.config.twoPageMode = !widget.config.twoPageMode;
if (twoPageMode) { storageHelper.writeConfig(widget.config);
if (widget.config.twoPageMode) {
paintMode = false; paintMode = false;
// TODO: notification that paint mode was deactivated since only possible in single page mode // TODO: notification that paint mode was deactivated since only possible in single page mode
} }
}); });
}, },
icon: Icon(twoPageMode ? Icons.filter_1 : Icons.filter_2), icon: Icon(
widget.config.twoPageMode ? Icons.filter_1 : Icons.filter_2,
),
), ),
], ],
), ),
@@ -164,7 +172,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
document: document, document: document,
pageNumber: page, pageNumber: page,
maximumDpi: 300, maximumDpi: 300,
alignment: twoPageMode alignment: widget.config.twoPageMode
? Alignment.centerRight ? Alignment.centerRight
: Alignment.center, : Alignment.center,
), ),
@@ -179,7 +187,7 @@ class _SheetViewerPageState extends State<SheetViewerPage> {
), ),
), ),
Visibility( Visibility(
visible: twoPageMode == true, visible: widget.config.twoPageMode == true,
child: Expanded( child: Expanded(
child: Stack( child: Stack(
children: [ children: [

View File

@@ -3,8 +3,21 @@ import 'package:hive/hive.dart';
enum SecureStorageKey { url, jwt, email, password } enum SecureStorageKey { url, jwt, email, password }
enum ConfigKey { twoPageMode }
class Config {
Config({required this.twoPageMode, required this.fullscreen});
static const String keyTwoPageMode = "twoPageMode";
static const String keyFullscreen = "fullscreen";
bool twoPageMode;
bool fullscreen;
}
class StorageHelper { class StorageHelper {
final sheetAccessTimesBox = "sheetAccessTimes"; final sheetAccessTimesBox = "sheetAccessTimes";
final configBox = "config";
late FlutterSecureStorage secureStorage; late FlutterSecureStorage secureStorage;
@@ -22,6 +35,20 @@ class StorageHelper {
return secureStorage.write(key: key.name, value: value); return secureStorage.write(key: key.name, value: value);
} }
Future<Config> readConfig() async {
final box = await Hive.openBox(configBox);
return Config(
twoPageMode: box.get(Config.keyTwoPageMode) ?? false,
fullscreen: box.get(Config.keyFullscreen) ?? false,
);
}
Future<void> writeConfig(Config config) async {
final box = await Hive.openBox(configBox);
box.put(Config.keyTwoPageMode, config.twoPageMode);
box.put(Config.keyFullscreen, config.fullscreen);
}
Future<Map<String, DateTime>> readSheetAccessTimes() async { Future<Map<String, DateTime>> readSheetAccessTimes() async {
final box = await Hive.openBox(sheetAccessTimesBox); final box = await Hive.openBox(sheetAccessTimesBox);
return box.toMap().map( return box.toMap().map(