persist twoPageMode
This commit is contained in:
@@ -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,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: [
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user