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';
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
final Config config;
const MyHomePage({super.key, required this.config});
@override
State<MyHomePage> createState() => _MyHomePageState();
@@ -73,8 +75,11 @@ class _MyHomePageState extends State<MyHomePage> {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
SheetViewerPage(sheet: sheet, apiClient: apiClient!),
builder: (context) => SheetViewerPage(
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/home_page.dart';
import 'package:sheetless/storage_helper.dart';
import 'package:sheetless/utility.dart';
class LoginPage extends StatefulWidget {
const LoginPage({super.key});
@@ -77,10 +76,11 @@ class _LoginPageState extends State<LoginPage> {
}
}
void _navigateToMainPage() {
Navigator.of(
context,
).pushReplacement(MaterialPageRoute(builder: (_) => MyHomePage()));
Future<void> _navigateToMainPage() async {
final config = await _storageHelper.readConfig();
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => MyHomePage(config: config)),
);
}
@override

View File

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

View File

@@ -3,8 +3,21 @@ import 'package:hive/hive.dart';
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 {
final sheetAccessTimesBox = "sheetAccessTimes";
final configBox = "config";
late FlutterSecureStorage secureStorage;
@@ -22,6 +35,20 @@ class StorageHelper {
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 {
final box = await Hive.openBox(sheetAccessTimesBox);
return box.toMap().map(