diff --git a/lib/home_page.dart b/lib/home_page.dart index 0af5691..c6ba9c2 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -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 createState() => _MyHomePageState(); @@ -73,8 +75,11 @@ class _MyHomePageState extends State { Navigator.push( context, MaterialPageRoute( - builder: (context) => - SheetViewerPage(sheet: sheet, apiClient: apiClient!), + builder: (context) => SheetViewerPage( + sheet: sheet, + apiClient: apiClient!, + config: widget.config, + ), ), ); }, diff --git a/lib/login_page.dart b/lib/login_page.dart index 7444b81..ed51647 100644 --- a/lib/login_page.dart +++ b/lib/login_page.dart @@ -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 { } } - void _navigateToMainPage() { - Navigator.of( - context, - ).pushReplacement(MaterialPageRoute(builder: (_) => MyHomePage())); + Future _navigateToMainPage() async { + final config = await _storageHelper.readConfig(); + Navigator.of(context).pushReplacement( + MaterialPageRoute(builder: (_) => MyHomePage(config: config)), + ); } @override diff --git a/lib/sheet_viewer_page.dart b/lib/sheet_viewer_page.dart index 1e37cf1..013ae7a 100644 --- a/lib/sheet_viewer_page.dart +++ b/lib/sheet_viewer_page.dart @@ -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 { final log = Logger("SheetViewerPage"); + final StorageHelper storageHelper = StorageHelper(); + int page = 1; int numPages = 1; - bool isFullscreen = false; late Future documentLoaded; PdfDocument? document; - bool twoPageMode = true; bool paintMode = false; @override @@ -63,8 +66,10 @@ class _SheetViewerPageState extends State { } 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 { 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 { 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 { document: document, pageNumber: page, maximumDpi: 300, - alignment: twoPageMode + alignment: widget.config.twoPageMode ? Alignment.centerRight : Alignment.center, ), @@ -179,7 +187,7 @@ class _SheetViewerPageState extends State { ), ), Visibility( - visible: twoPageMode == true, + visible: widget.config.twoPageMode == true, child: Expanded( child: Stack( children: [ diff --git a/lib/storage_helper.dart b/lib/storage_helper.dart index 4ea5a44..eb1bfe4 100644 --- a/lib/storage_helper.dart +++ b/lib/storage_helper.dart @@ -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 readConfig() async { + final box = await Hive.openBox(configBox); + return Config( + twoPageMode: box.get(Config.keyTwoPageMode) ?? false, + fullscreen: box.get(Config.keyFullscreen) ?? false, + ); + } + + Future writeConfig(Config config) async { + final box = await Hive.openBox(configBox); + box.put(Config.keyTwoPageMode, config.twoPageMode); + box.put(Config.keyFullscreen, config.fullscreen); + } + Future> readSheetAccessTimes() async { final box = await Hive.openBox(sheetAccessTimesBox); return box.toMap().map(